0

我有一個按鈕,大小爲width=216height=110在設備屏幕分辨率爲1080 x 1920.當我更改爲其他設備(較小的分辨率)時,按鈕是如此之大。因此,我需要編寫一個功能來根據屏幕的設備分辨率動態更改按鈕大小。首先,我會檢查目標設備的分辨率,然後根據我目前的設備進行更改。但是,按鈕分辨率不正確。我該如何解決它?這是我的代碼如何根據屏幕設備更改按鈕大小?

我在1080×1920

 <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_gravity="center" 
     > 
     <Button 
      android:id="@+id/btn" 
      android:layout_width="216dp" 
      android:layout_height="110dp" 
      android:layout_gravity="center" 
      android:scaleType="fitCenter" 
      /> 
     </LinearLayout> 

代碼更改爲動態的方式:

public int WIDTH ; 
    public int HEIGHT ; 
    //Get screen resolution 
    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    HEIGHT = metrics.heightPixels; 
    WIDTH= metrics.widthPixels;   

    int height_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 110, getResources().getDisplayMetrics()); 
    int weight_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 216, getResources().getDisplayMetrics()); 
    int width_linearlayout = Math.round((float)weight_px/1080*WIDTH); 
    int height_linearlayout = Math.round((float)height_px/1920*HEIGHT); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width_linearlayout,height_linearlayout); 
    btn.setLayoutParams(layoutParams); 
+0

你有沒有通過[支持多種佈局(HTTPS閱讀://開發商。 android.com/guide/practices/screens_support.html)?如果不是的話,我建議你繼續看看。 – Abbas

+0

@Abbas:它來自xml和drawable文件夾。我想用編程來改變我的按鈕 – user8264

+0

然後,你將不得不做很多值得的工作。我建議你通過佈局來做到這一點。檢查@slackwars答案,這是實現你想要的最好的方式。但是,解決方案僅適用於具有相似佈局的情況。對於不同大小的不同佈局,您必須添加多個佈局。 – Abbas

回答

3

我會在這種情況下做的是爲不同的屏幕尺寸要求創建一個特定的dimens.xml。

Android studio dimens.xml view

每個這些將包含特定於與屏幕擬合這些尺寸的設備的參數。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="nav_header_height">160dp</dimen> 
    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="activity_horizontal_margin">16dp</dimen> 
    <dimen name="activity_vertical_margin">16dp</dimen> 
    <dimen name="button_size_height">32dp</dimen> 
    <dimen name="button_size_width">70dp</dimen> 
</resources> 

沒有額外的編碼,只需要維護多個包含您的按鈕參數的XML文件。

每個維度將被引用爲這樣的:

<Button 
      android:id="@+id/btn" 
      android:layout_width="@dimen/button_size_width" 
      android:layout_height="@dimen/button_size_height" 
      android:layout_gravity="center" 
      android:scaleType="fitCenter" 
      /> 
+0

如何計算比參考分辨率更小或更大分辨率的按鈕尺寸(我的情況是'1080 x 1920')? – user8264

+0

轉到:https://developer.android.com/guide/practices/screens_support.html 並向下滾動到 '使用新的尺寸限定符' 這將簡要介紹如何格式化項目文件夾以支持多個屏幕分辨率。 – slackwars

0

你必須使用layout_weight以達到你想要什麼,並且將使用通過將每行按鈕包裹在LinearLayout中,並且將所有LinearLayouts加上TextView包裝在一個大的LinearLayout中,而不是像下面的RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ff000000" 
    android:orientation="vertical" 
    android:weightSum="6" > 

<TextView 
    android:id="@+id/disp" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:gravity="center" 
    android:inputType="none" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="@android:color/white" 
    android:textSize="32sp" 
    android:textStyle="normal" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:orientation="horizontal" 
    android:weightSum="4" > 

    <Button 
     android:id="@+id/clear" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" 
     android:background="@drawable/clear_btn" /> 

    <!-- then the three remaining buttons --> 

    <LinearLayout /> 

    <!-- then the four remaining rows --> 


    <!-- in the last row the "0" button will have layout_weight="2" NOT "1" --> 
</LinearLayout> 

+0

Hell0。我想用編程來改變按鈕尺寸,而不是xml – user8264

0

添加文件夾values-sw540dp它是1080屏幕。在此文件夾中添加dimens.xml

<dimen name="btn_height">100dp</dimen> 
    <dimen name="btn_width">65dp</dimen> 

編輯XML

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_gravity="center" 
     > 
     <Button 
      android:id="@+id/btn" 
      android:layout_width="@dimen/btn_width" 
      android:layout_height="@dimen/btn_height" 
      android:layout_gravity="center" 
      android:scaleType="fitCenter" 
      /> 
     </LinearLayout> 

其他分辨率

values-sw720dp   10.1」 tablet 1280x800 mdpi 

values-sw600dp   7.0」 tablet 1024x600 mdpi 

values-sw480dp   5.4」 480x854 mdpi 
values-sw480dp   5.1」 480x800 mdpi 

values-xhdpi   4.7」 1280x720 xhdpi 
values-xhdpi   4.65」 720x1280 xhdpi 

values-hdpi    4.0」 480x800 hdpi 
values-hdpi    3.7」 480x854 hdpi 

values-mdpi    3.2」 320x480 mdpi 

values-ldpi    3.4」 240x432 ldpi 
values-ldpi    3.3」 240x400 ldpi 
values-ldpi    2.7」 240x320 ldpi 
+0

對不起。我目前的分辨率是1080.我想計算出比我的參考分辨率更小或更大分辨率的按鈕分辨率,使用代碼 – user8264

+0

因此,添加其他值,像在答案中設置名稱並創建維度。 –

相關問題