2016-05-05 4 views
2

私は、左側に描画可能なアイコンを持つテキストビューがほとんどありません。 レイアウト:TextView set DrawableRight/Left ...アラインメント

  <android.support.v7.widget.CardView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/card_margin"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:padding="@dimen/detail_padding">     

       <TextView 
        android:id="@+id/location" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/title_margin" 
        android:drawableLeft="@drawable/ic_location" 
        android:drawablePadding="@dimen/drawable_padding" 
        android:drawableStart="@drawable/ic_location" /> 

       <TextView 
        android:id="@+id/status" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/title_margin" 
        android:drawableLeft="@drawable/ic_status" 
        android:drawablePadding="@dimen/drawable_padding" 
        android:drawableStart="@drawable/ic_status"/> 

       <TextView 
        android:id="@+id/description" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/title_margin" 
        android:drawableLeft="@drawable/ic_description" 
        android:drawablePadding="@dimen/drawable_padding" 
        android:drawableStart="@drawable/ic_description"/> 
      </LinearLayout> 
     </android.support.v7.widget.CardView> 

スクリーンショット:

enter image description here

テキストが大きすぎる場合は、アイコンがTextViewの中央に立ちます。私はiconviewのtopをtextviewに設定したい。出来ますか?

+0

あなたの完全なXMLレイアウト – Jeevanandhan

+0

を投稿私はあなたがこのリンクの答えを見ることをお勧めここhttp://stackoverflow.com/questions/10267352です/ textviewの先頭に/ 28906636#28906636] [1] –

+0

私はdrawableをtextviewの左上隅に設定したい –

答えて

0

あなたはRelativeLayout

<android.support.v7.widget.CardView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="@dimen/card_margin"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="@dimen/detail_padding">     
      <TextView 
       android:id="@+id/location" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="@dimen/title_margin" 
       android:drawableLeft="@drawable/ic_location" 
       android:drawablePadding="@dimen/drawable_padding" 
       android:drawableStart="@drawable/ic_location" /> 
      <TextView 
       android:id="@+id/status" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="@dimen/title_margin" 
       android:drawableLeft="@drawable/ic_status" 
       android:drawablePadding="@dimen/drawable_padding" 
       android:drawableStart="@drawable/ic_status"/> 
      <TextView 
       android:id="@+id/description" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="@dimen/title_margin" 
       android:drawableLeft="@drawable/ic_description" 
       android:drawablePadding="@dimen/drawable_padding" 
       android:drawableStart="@drawable/ic_description"/> 
     </RelativeLayout> 
    </android.support.v7.widget.CardView> 
+0

ありがとう、それは私に何を与えるのですか? –

+0

商品を移動する柔軟性 –

0

あなたはTextViewの上

android:layout_toRightOf="@+id/imageId" 

を設定して、画像上の

android:layout_alignParentLeft="true" 

できるようなレイアウトを維持する必要があります。

これが役に立ちます。

+0

ありがとうございます。私はそれをします –

+0

それはあなたの問題を解決しましたか?あなたはそれを受け入れました。私はそれがあなたのために働くとは思わない。 –

+0

これは相対レイアウトで動作します。 –

0

ちょうどあなたがあなたのDrawableのをラップするカスタムDrawableのを作成する必要があり、その後、カスタムDrawableのの描画を操作するこれを行うためのImageViewの

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="@dimen/detail_padding"> 

    <TextView 
     android:id="@+id/location" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="@dimen/title_margin" 
     android:drawableLeft="@drawable/ic_location" 
     android:drawablePadding="@dimen/drawable_padding" 
     android:drawableStart="@drawable/ic_location" /> 

    <TextView 
     android:id="@+id/status" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="@dimen/title_margin" 
     android:drawableLeft="@drawable/ic_status" 
     android:drawablePadding="@dimen/drawable_padding" 
     android:drawableStart="@drawable/ic_status" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="@dimen/drawable_padding" 
      android:src="@drawable/ic_description" /> 

     <TextView 
      android:id="@+id/description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/title_margin" /> 
    </LinearLayout> 
</LinearLayout> 

0

を使用onDraw(Canvas)メソッドをオーバーライドします。

下記のサンプルがあります。これにより、イメージが上部に揃えられますが、onDraw(Canvas)メソッドで必要なロジックを実装することで、イメージをTextViewの下部、左または右に揃えることもできます。また、onDraw(Canvas)のマージンを作成して、デザインの実装ピクセルを完璧にすることもできます。

使用例:

GravityTopDrawable gravityDrawable = new GravityTopDrawable(innerDrawable); 
// NOTE: next 2 lines are important! 
innerDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight()); 
gravityDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight()); 
mTextView.setCompoundDrawables(gravityDrawable, null, null, null); 

サンプルコード:

public class GravityTopDrawable extends Drawable { 

    // inner Drawable 
    private final Drawable mDrawable; 

    public GravityTopDrawable(Drawable drawable) { 
     mDrawable = drawable; 
    } 

    @Override 
    public int getIntrinsicWidth() { 
     return mDrawable.getIntrinsicWidth(); 
    } 

    @Override 
    public int getIntrinsicHeight() { 
     return mDrawable.getIntrinsicHeight(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     int halfCanvas= canvas.getHeight()/2; 
     int halfDrawable = mDrawable.getIntrinsicHeight()/2; 

     // align to top 
     canvas.save(); 
     canvas.translate(0, -halfCanvas + halfDrawable); 
     mDrawable.draw(canvas); 
     canvas.restore(); 
    } 
} 
関連する問題