2015-10-29 9 views
6

私はPic1のように結果を得ようとしています。設定重力、パドルレフトなどを試しましたが、描画可能なイメージは右端にあり、テキストの隣にはありません(図2の中に表示)enter image description here。誰もTextViewの横にイメージを整列させる方法を提案できますか?ドロアブルのサイズを設定する方法も?Android:LinearLayoutの各TextViewに重み付けされたTextViewの隣に描画可能

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:background="@drawable/separator" 
    android:padding="10dp"> 

<TextView 
    android:id="@+id/sms" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="2dp" 
    android:layout_marginRight="2dp" 
    android:layout_weight="1" 
    android:drawableEnd="@drawable/message" 
    android:drawableRight="@drawable/message" 
    android:gravity="center" 
    android:paddingLeft="3dp" 
    android:paddingRight="3dp" 
    android:text="SMS" /> 

<TextView 
    android:id="@+id/call" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:drawableEnd="@drawable/call" 
    android:drawableRight="@drawable/call" 
    android:gravity="center" 
    android:text="CALL" /> 

<TextView 
    android:id="@+id/email" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" 
    android:drawableEnd="@drawable/mail" 
    android:drawablePadding="3dp" 
    android:drawableRight="@drawable/mail" 
    android:text="MAIL" /> 

+0

重量へテキストビュー力はそれが故にdrwableがTextViewの – Dhina

+0

利用drawableLeftの行き止まりに配置された幅全体を占有して画像を設定... drawablePaddingを与える...それは完璧になります – Prakhar

答えて

0

レイアウトネストを必要とdoesntの、必要に応じて描画可能画像を揃えることができますカスタムボタンを作成しました。

レイアウトファイルbutton.xml:

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/custom_button" 
    style="@style/custom_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:drawablePadding="5dp" 
    android:gravity="center" /> 

カスタムボタンのクラス:

public class DrawableAlignedButton extends RelativeLayout { 

    private View view; 
    private Button button; 

    /** 
    * @param context 
    *   used to inflate the View. 
    * @param attrs 
    *   XML defined attributes. 
    */ 
    public DrawableAlignedButton(final Context context, final AttributeSet attrs) { 
    super(context, attrs); 
    init(context, attrs); 
    } 

    /** 
    * @param context 
    *   used to inflate the View. 
    */ 
    public DrawableAlignedButton(final Context context) { 
    super(context); 
    init(context, null); 
    } 

    /** 
    * @param context 
    *   used to inflate the View. 
    * @param attrs 
    *   XML defined attributes. 
    * @param style 
    *   the style for the View. 
    */ 
    public DrawableAlignedButton(final Context context, final AttributeSet attrs, final int style) { 
    super(context, attrs, style); 
    init(context, attrs); 
    } 

    private void init(final Context context, final AttributeSet attributeSet) { 
    view = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.button, this, true); 
    button = (Button) view.findViewById(R.id.custom_button); 

    String buttonText = null; 
    int drawableStart = 0; 
    int drawableEnd = 0; 

    if (attributeSet != null) { 
     final TypedArray a = context.getTheme().obtainStyledAttributes(attributeSet, R.styleable.CustomButtonStyle, 0, 0); 
     buttonText = a.getString(R.styleable.CustomButtonStyle_buttonText); 
     drawableStart = a.getResourceId(R.styleable.CustomButtonStyle_buttonDrawableStart, 0); 
     drawableEnd = a.getResourceId(R.styleable.CustomButtonStyle_buttonDrawableEnd, 0); 
     a.recycle(); 
    } 

    FontUtil.getInstance(context).useNormalRegularFont(button); 

    if (buttonText != null) { 
     button.setText(buttonText); 
    } 

    button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, 0, drawableEnd, 0); 
    } 

    /** 
    * Sets the button text. 
    * 
    * @param text 
    *   the text to be set. 
    */ 
    public void setButtonText(final String text) { 
    if (button != null) { 
     button.setText(text); 
    } 
    } 

    /** 
    * Sets the drawable to the button. 
    * 
    * @param drawableStart 
    *   the drawable to set at the beginning of the text. 
    * @param drawableEnd 
    *   the drawable to set at the end of the text. 
    */ 
    public void setDrawableStart(final int drawableStart, final int drawableEnd) { 
    if (button != null) { 
     button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, 0, drawableEnd, 0); 
    } 
    } 

} 

XMLでそれを使用する方法:

<com.package.view.DrawableAlignedButton 
     xmlns:drawableAlignedButton="http://schemas.android.com/apk/res-auto" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="@drawable/transparent_button_selector" 
     drawableAlignedButton:buttonDrawableStart="@drawable/small_active" 
     drawableAlignedButton:buttonText="Button Text" /> 
6

この周りを構築するようにしてください。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:orientation="horizontal" 
    android:padding="10dp"> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1"> 

     <TextView 
      android:id="@+id/sms" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="2dp" 
      android:gravity="center" 
      android:drawableRight="@drawable/message" 
      android:text="SMS" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1"> 

     <TextView 
      android:id="@+id/call" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:drawableRight="@drawable/call" 

      android:gravity="center" 
      android:text="CALL" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1"> 

     <TextView 
      android:id="@+id/email" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:drawableRight="@drawable/mail" 
      android:gravity="center" 
      android:text="MAIL" /> 
    </LinearLayout> 
</LinearLayout> 

enter image description here

+0

は当初、私はこの方法でそれをやって考えたが、レイアウトを避けるために、ネスティングはネストした線形レイアウトなしで試しました。結果を得るためにコードを使用します。 drawableのサイズを変更する方法はありますか? – kumar

+0

プログラム可能にtextviewに描画可能なサイズを設定していますか? – Dhina

+0

タブのレイアウトはこれよりも優れています – rKrishna

0

主な問題は、あなたがlayoutWidth = 0dpと重量1を設定している。これは、すべてのTextViewは重量に応じて最大幅を取るなることです。 drawableRight/drawableEndは、描画可能リソースをビューの右端に設定します。このレイアウトをそのまま@Dhinakaranのような別のviewGroupにラップしておきたい場合は、より良いアプローチはタブレイアウトを使用することです。

0

複数の線形レイアウトを使用する代わりに、相対レイアウトを使用できます。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="bottom" 
     android:layout_weight=".33" 
     android:gravity="center_horizontal|center_vertical"> 

     <TextView 
      android:id="@+id/textView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="Small Text" 
      android:textAppearance="?android:attr/textAppearanceSmall"/> 

     <ImageView 
      android:id="@+id/imageView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toEndOf="@+id/textView" 
      android:layout_toRightOf="@+id/textView" 
      android:src="@android:drawable/btn_star"/> 
    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="bottom" 
     android:layout_weight=".33" 
     android:gravity="center_horizontal|center_vertical"> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="Small Text" 
      android:textAppearance="?android:attr/textAppearanceSmall"/> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toEndOf="@+id/textView2" 
      android:layout_toRightOf="@+id/textView2" 
      android:src="@android:drawable/btn_star"/> 
    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="bottom" 
     android:layout_weight=".33" 
     android:gravity="center_horizontal|center_vertical"> 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="Small Text" 
      android:textAppearance="?android:attr/textAppearanceSmall"/> 

     <ImageView 
      android:id="@+id/imageView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toEndOf="@+id/textView3" 
      android:layout_toRightOf="@+id/textView3" 
      android:src="@android:drawable/btn_star"/> 
    </RelativeLayout> 
</LinearLayout> 

結果

enter image description here

関連する問題