2016-05-05 3 views
2

У меня мало текстовых элементов с выделенными значками на левой стороне. расположение:TextView set DrawableRight/Left ... alignment

  <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. Я хочу установить значок, выровненный сверху текста. Является ли это возможным?

+0

опубликовать полный макет XML – Jeevanandhan

+0

Я предлагаю вам увидеть эту ссылку ответ здесь http://stackoverflow.com/questions/10267352/align-top-of-image-to-top-of-textview/28906636 # 28906636] [1] –

+0

Я хочу, чтобы убираемый набор в левый верхний край текстового поля –

ответ

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

Вы можете установить

android:layout_toRightOf="@+id/imageId" 

на TextView и

android:layout_alignParentLeft="true" 

на изображении.

надеюсь, что это поможет.

+0

спасибо. я сделаю это –

+0

Он решил вашу проблему? вы приняли это. Я не думаю, что это сработает для вас. –

+0

Это будет работать с относительной компоновкой. –

0

Просто используйте 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

для этого вам придется создать пользовательскую вытяжку, который оборачивает вашу вытяжку, а затем манипулировать рисунок пользовательского Drawable путем переопределения метода onDraw (Canvas).

Приведенный ниже пример. Это выравнивает изображение вверху, но вы также можете сделать его выровненным в нижней, левой или правой части TextView, реализовав требуемую логику в методе onDraw (Canvas). Возможно, вы также захотите построить маржу в 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(); 
    } 
}