Fond d'écran Android + texte + icône pour un bouton

Je voudrais avoir une image définie pour l'arrière-plan d'un texte et une icône sur le côté gauche du texte. Très facile dans l'iPhone, mais ne peut pas comprendre comment le faire à Android, pour être redimensionnable sur ce bouton et garder l'icône + la position et la distance du texte correctement.

IPhone:

  • Arrêter le service dans Android
  • Comment est-il inexact est setInexactRepeating () pour AlarmManager?
  • Le choix de l'intention Android semble lent
  • La conversion au format Dalvik a échoué avec l'erreur 1 - Exportation d'APK
  • Préférence personnalisée, targetSdkVersion = "11": absence de retrait?
  • Comment puis-je éviter de rejeter ma boîte de dialogue AlertDialog.Builder lorsque l'utilisateur touche l'écran?
  • IPhone

    Android, j'ai ceci:

    Android

    Le code xml est:

    <Button android:id="@+id/btSettings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/tvWhatever" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:background="@drawable/bt_general" android:drawableTop="@drawable/settings_selected" android:text="@string/settings" android:textColor="#000000" /> 

    Pris le code ici .

    Si j'utilise android:drawableLeft , que l'icône va dans la partie la plus à gauche.

    Entrez la description de l'image ici

    Si je commence à jouer avec des rembourrages semi-codés, j'aurai un regard différent sur diff devives: (téléphone et table)

    Si j'ajoute l' android:gravity="left|center_vertical" il se ressemblera comme ceci:

    Entrez la description de l'image ici

    Le texte est variable: il changera, lorsque l'utilisateur change la langue.

    Comment le faire correctement?

    Je ne veux pas renoncer à la réponse de quelqu'un, mais lisez la question et ne propose pas ce que j'ai déjà essayé. Aussi dit que les correctifs codés ne fonctionnent pas bien.

    Ce n'est pas un devoir, mais une partie de logiciel commercial.

    Voici un code suggéré à partir des réponses:

     <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bt_general" android:padding="20dip" > <ImageView android:id="@+id/xIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="10dip" android:src="@drawable/settings_selected" /> <TextView android:id="@+id/xSettingsTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/settings" android:textColor="#000000" /> </RelativeLayout> 

    Que pensez-vous de la façon dont il ressemblera à l' android:layout_marginLeft="10dip" sur Galaxy S4? Voici un aperçu:

    Entrez la description de l'image ici

    Ce n'est pas ce que j'ai demandé. "Dip" ou "dp" ou "px" ne doit pas être utilisé comme distance de gauche, en haut, car les téléphones ont HPDI, un écran plus petit et les tablettes ont MDPI et de larges résolutions. Simple ne fonctionne pas sur mdpi, et xxhdpi.

    La réponse de Nizam est très proche d'une bonne solution:

    Entrez la description de l'image ici

  • Comment puis-je gérer les volumes audio dans mon application Android?
  • Comment faire une mise en page de la carte de CardView avec une hauteur variable?
  • Quel thread exécute ContentProvider?
  • Besoin de stocker beaucoup de données sur un appareil Android, en pensant à aller OODB
  • Android.widget.LinearLayout ne peut pas être diffusé sur android.widget.TextView
  • La méthode getWindow () n'est pas définie pour le type AlertDialog.Builder
  • 14 Solutions collect form web for “Fond d'écran Android + texte + icône pour un bouton”

    Peut-être que vous devriez utiliser RelativeLayout avec des coins arrondis, que mettre TextView et ImageView à l'intérieur de celui-ci.

    Essaye ça:

      Button button = (Button) findViewById(R.id.button1); Spannable buttonLabel = new SpannableString(" Settings"); buttonLabel.setSpan(new ImageSpan(getApplicationContext(), R.drawable.settings_selected, ImageSpan.ALIGN_BOTTOM), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); button.setText(buttonLabel); 

    Essayez ceci: Suivez ceci: http://porcupineprogrammer.blogspot.in/2013/03/android-ui-struggles-making-button-with.html

     <FrameLayout style="?android:attr/buttonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:drawableLeft="@android:drawable/ic_delete" android:gravity="center" android:text="Button Challenge" /> </FrameLayout> 

    Voici comment je fais les choses:

    COUCHES

     <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/rounded_border"/> <item android:drawable="@drawable/selector_button"/> </layer-list> 

    SÉLECTEUR

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/clr_grey_1" android:state_selected="true" android:state_window_focused="false"/> <item android:drawable="@color/clr_grey_1" android:state_selected="true"/> <item android:drawable="@color/clr_grey_1" android:state_pressed="true" android:state_selected="false"/> <item android:drawable="@color/clr_main_green" android:state_selected="false"/> </selector> 

    COIN RONDE

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/clr_grey_2" /> <stroke android:width="1dp" android:color="@android:color/white" /> <corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> <padding android:bottom="0dp" android:left="4dp" android:right="0dp" android:top="4dp" /> </shape> 

    Utilisez ceci sur la disposition relative, avec une imageview et un bouton à l'intérieur

    Essayez la mise en page ci-dessous

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="100dip" android:orientation="horizontal" android:background="@drawable/round_corners_drawable" > <ImageView android:id="@+id/xIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="10dip" android:layout_centerVertical="true" android:src="@drawable/ic_launcher"/> <TextView android:id="@+id/xSettingsTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Settings" android:layout_centerInParent="true" /> </RelativeLayout> 

    Et drawable / round_corner_drawable est comme ci-dessous:

     <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#310704"/> <corners android:bottomRightRadius="20sp" android:bottomLeftRadius="20sp" android:topLeftRadius="20sp" android:topRightRadius="20sp"/> <gradient android:startColor="#99310704" android:centerColor="#99310704" android:endColor="#99310704" android:angle="270" /> </shape> 

    De plus, si vous souhaitez utiliser votre image en arrière-plan, donnez à android:layout_height="wrap_content" et définissez-le comme arrière-plan pour la mise en page relative.

    Ps Si vous mettez différentes valeurs de couleur pour startColor , centerColor et endColor , vous obtiendrez cet effet de dégradé pour votre arrière-plan dessiné. Modifiez donc les valeurs de couleur en conséquence.

    MODIFIER:

    Essayez la mise en page ci-dessous, je l'ai édité pour s'adapter à différentes tailles d'écran avec un angle arrondi pouvant être dessiné.

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="20dip" android:background="@drawable/dialog_round_corners" > <ImageView android:id="@+id/xIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/xSettingsTxt" android:layout_centerVertical="true" android:src="@drawable/ic_launcher"/> <TextView android:id="@+id/xSettingsTxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Settings" android:layout_centerInParent="true" /> </RelativeLayout> 
     <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button Text" android:background="@drawable/round_background" android:drawableLeft="@drawable/icon"/> 

    Enregistrez le code xml ci-dessous comme round_background.xml et placez-le sur un dossier dessiné. Utilisez ceci si vous le souhaitez, mais vous pouvez également utiliser l'image à partir du dossier dessiné.

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#f5f5f5" /> <corners android:radius="10px" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> <stroke android:width="1dp" android:color="#ccc" /> </shape> 

    J'avais réalisé cela avec le code suivant. Peut être utilisé comme alternative plus facile aux solutions ci-dessus.

     <Button android:id="@+id/btnUserProfile" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:drawableLeft="@drawable/ic_user_profile" android:background="#6C6C6C" android:drawablePadding="8dp" android:gravity="left|center_vertical" android:text="@string/my_profile" android:textStyle="bold|italic" /> 

    La vue du bouton est marquée en rouge (ce n'est pas un élément de liste mais un bouton avec le code ci-dessus):

    Entrez la description de l'image ici

    Trouvé une classe appelée CenteredIconButton qui étend le bouton sur ce lien. A travaillé comme une magie. Comment avoir l'image et le centre de texte dans un bouton . Merci à @atomicode

    Si votre bouton est large: android:layout_width="wrap_content" votre code sera ainsi:

      <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/img name" android:gravity="left|center" android:text="Button" /> 

    Sinon, si votre bouton est large: android:layout_width="match_parent" votre code sera ainsi:

     <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/img name" android:gravity="left|center" android:text="Button" android:paddingLeft="100dp" /> 

    Par ailleurs android:paddingLeft="100dp" , changez 100 avec votre valeur appropriée.

     <Button android:id="@+id/btSettings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/back_button" android:drawablePadding="5dp" android:drawableLeft="@drawable/ic_launcher" android:text="Settings" android:padding="20dp" android:textColor="#000000" /> 

    Vous pouvez utiliser le bouton paddingLeft et paddingRight pour obtenir le bouton comme celui de l'iphone

    Essayez d'utiliser TextView,

     <TextView android:id="@+id/txtSettings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/tvWhatever" android:layout_centerHorizontal="true" android:text="@string/settings" android:textColor="#000000" /> 

    En Java

     txtView.setBackgroundResources(R.drawable.bt_general); txtView.setCompoundDrawablesWithIntrinsicBounds(Drawable left,Drawable top,Drawable right,Drawable bottom); 

    Où est l'image desséchable,

     Bitmap bitmap= BitmapFactory.decodeResource(context.getResources(), R.drawable.settings_selected); BitmapDrawable drawable=new BitmapDrawable(getResources(), bitmap); 

    Je viens d'implémenter ce type de bouton (et il a été déployé dans une application à grande échelle), ce n'est pas vraiment compliqué: le contenu de large_button.xml:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/large_button_background" android:clickable="true" android:gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_marginRight="16dp" android:src="@drawable/some_icon" /> <com.my.app.widget.RobotoTextView android:id="@+id/large_button_text" style="@style/AppName_RobotoBold" android:layout_width="wrap_content" android:layout_height="match_parent" android:ellipsize="end" android:focusable="false" android:gravity="center_vertical" android:maxLines="1" android:singleLine="true" android:textColor="@color/text_main" /> </LinearLayout> 

    Ensuite, pour l'utiliser, je dois simplement utiliser la balise include:

     <include android:id="@+id/large_button" android:layout_width="match_parent" android:layout_height="@dimen/large_button_height" android:layout_marginBottom="@dimen/large_button_vertical_margin" android:layout_marginLeft="@dimen/large_button_horizontal_margin" android:layout_marginRight="@dimen/large_button_horizontal_margin" android:layout_marginTop="@dimen/large_button_vertical_margin" layout="@layout/large_button" /> 

    Large_button_background est un sélecteur qui pointe vers les différents drawables à utiliser pour chaque état de bouton

    J'ai utilisé un LinearLayout, il permet de centrer simplement le texte et les icônes dans le bouton. Il devrait également être possible avec un GridLayout. Si vous souhaitez vous centrer juste sur le texte (je ne pense pas que cela semble génial, mais c'est votre choix), utilisez un RelativeLayout.

    Vous pouvez utiliser Android: paddingLeft, android: paddingRight et layout_width à une largeur fixe pour résoudre le problème.

     <Button android:id="@+id/btSettings" android:layout_width="148dp" android:layout_height="wrap_content" android:paddingLeft="32dp" android:paddingRight="32dp" android:background="@drawable/bt_general" android:drawableLeft="@drawable/settings_selected" android:text="@string/settings" android:textColor="#000000"/> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.