0

J'ai un bouton avec la taille width=216 et height=110 dans une résolution d'écran de l'appareil est 1080 x 1920. Lorsque je change de l'autre appareil (plus petite résolution), le bouton est si gros. Par conséquent, j'ai besoin d'écrire une fuction pour changer dynamiquement la taille du bouton selon la résolution de l'appareil. Tout d'abord, je vais vérifier la résolution de l'appareil cible, puis je le modifie en fonction de dessus de mon appareil actuel. Cependant, la résolution du bouton n'est pas correcte. Comment puis-je le réparer? Ceci est mon codeComment changer la taille du bouton en fonction de l'appareil?

Mon code dans le 1080x1920

 <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> 

Changé à façon dynamique:

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

Avez-vous lu par [Soutenir Layouts multiples] (https: // développeur. android.com/guide/practices/screens_support.html)? Si non, je vous suggère de continuer et de jeter un coup d'œil. – Abbas

+0

@Abbas: Il est de xml et dossier drawable. Je veux changer mon bouton en utilisant la programmation – user8264

+0

Ensuite, vous devrez faire beaucoup de travail vaut très peu. Je vous suggère de le faire via des mises en page. Vérifiez @slackwars répondre que c'est le meilleur moyen d'atteindre ce que vous voulez. Cependant, la solution ne fonctionne que si vous avez des dispositions similaires. Pour différentes dispositions pour différentes tailles, vous devrez ajouter plusieurs mises en page à la place. – Abbas

Répondre

3

Ce que je ferais dans des situations comme celle-ci est de créer un dimens.xml spécifique pour différentes exigences de taille de l'écran.

Android studio dimens.xml view

Chacun de ces contiendrait des paramètres spécifiques aux appareils avec des écrans adaptant ces dimensions.

<?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> 

Aucun codage supplémentaire, suffit de gérer plusieurs fichiers xml contenant vos paramètres de bouton.

Chaque dimension serait référencée en tant que telle:

<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

Comment pouvez-vous calculer la taille des boutons pour une résolution plus petite ou plus grande que la résolution de référence (mon cas est '1080 x 1920')? – user8264

+0

goto: https://developer.android.com/guide/practices/screens_support.html et faites défiler vers le bas pour 'l'aide nouvelle taille qualifiers' Cela vous donnera un bref rapide sur la façon de formater vos dossiers de projet pour soutenir résolutions d'écran multiples. – slackwars

0

Vous devez utiliser layout_weight afin d'obtenir ce que vous voulez, et qui sera utilisé en enveloppant chaque rangée de boutons à l'intérieur d'un LinearLayout et tout ce LinearLayouts plus le TextView sera enveloppé dans un grand LinearLayout au lieu de votre RelativeLayout comme le suivant:

<?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. Je veux utiliser la programmation pour changer la taille du bouton, pas xml – user8264

0

Ajouter un dossier values-sw540dp son est pour écrans 1080p. Dans ce dossier, ajouter dimens.xml

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

Modifier votre 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> 

Autres résolutions

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

Désolé. Ma résolution actuelle est 1080. Je veux calculer la résolution du bouton pour une résolution plus petite ou plus grande que ma résolution de référence en utilisant le code – user8264

+0

Donc, ajouter d'autres valeurs, définir le nom comme en réponse et créer des dimensions. –