2017-04-04 51 views
0

我有CustomLayout其中TextView我设置文本和绘制编程但是问题是当我设置drawable它正在添加一个巨大的填充与我想绘制更多在中心而不是顶部。删除drawableTop和文本之间的填充

定制的ViewGroup

public class ProfileGridView extends FrameLayout { 
public ProfileGridView(@NonNull Context context) { 
    super(context); 
    initView(context,null); 
} 

public ProfileGridView(@NonNull Context context, @Nullable AttributeSet attrs) { 
    super(context, attrs); 
    initView(context,attrs); 

} 

public ProfileGridView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    initView(context,attrs); 
} 

@TargetApi(21) 
public ProfileGridView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    initView(context,attrs); 
} 

public void initView(Context context, AttributeSet attrs) { 
    TextView gridTextView; 
    View view = inflate(context, R.layout.square_grid, null); 
    gridTextView = (TextView) view.findViewById(R.id.grid_description); 

    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ProfileGridView); 
    Drawable drawable = array.getDrawable(R.styleable.ProfileGridView_drawble); 
    String description = array.getString(R.styleable.ProfileGridView_grid_description); 

    gridTextView.setText(description); 
    gridTextView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null); 
    addView(view); 
    array.recycle(); 
    } 
} 

CustomView LayoutFile

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/grid_description" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:drawablePadding="8dp" 
android:gravity="center" 
android:padding="0dp" 
android:textSize="20sp" /> 

MainActivit.xml

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

    <com.example.views.ProfileGridView 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     app:drawble="@drawable/ic_message" 
     app:grid_description="Message"/> 

</RelativeLayout> 

Screenshot of the View

回答

0

你可以使用一个CustomView LayoutFile这样的绘制?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:gravity="center"> 
<ImageView 
    android:id="@+id/image" 
    android:layout_width="52dp" 
    android:layout_height="52dp" /> 
<TextView 
    android:id="@+id/grid_description" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:padding="4dp" 
    android:textSize="20sp"/> 
</LinearLayout> 

并设置像相反编辑

至于你问的这个

ImageView image; 
    image = (ImageView) view.findViewById(R.id.image); 
    image.setImageDrawable(drawable); 

gridTextView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null); 

提拉,可以使ProfileGridView WRAP_CONTENT而不是200dp。使用setCompoundDrawablesWithIntrinsicBounds将可绘制表单附加到TextView(200dp)的边界上。 [你可以查看文档的更多信息](https://developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesWithIntrinsicBounds(android.graphics.drawable.Drawable,android.graphics.drawable.Drawable,android.graphics.drawable.Drawable,android.graphics.drawable.Drawable))

+0

我想这是做到这一点的唯一方法,而不是使用LinearLayout,我想用TextView设置ImageDrawable顶部 –

+0

@prathamkesarkar检查编辑 – jorgeavilae

+0

通过攻击可绘制的边界你的意思是将TextView的高度设置为200dp并将wrap_content添加到它的高度在activity_main –

0

这不是一个填充的问题,是因为你是你能在绘制文件中使用“WRAP_CONTENT”设置可绘制的宽度和高度为200dp

如果不只是有一个图像文件,并将其设置为TextView的

+0

试试将宽度和高度设置为40dp或者什么,你会看到不是填充 –

+0

我试着在textview中设置高度为64dp,但它仍然向我展示了同样的东西,它似乎像drawable正在尝试使用所有可用空间 –

+0

尝试更改Drawable RelativeLayout宽度也是pls,从match_parent到wrap_content甚至是你说的64dp –