删除drawableTop和文本之间的填充

时间:2017-04-04 14:26:17

标签: android android-custom-view

我有CustomLayout,它有TextView,我在其上设置文本和可绘制编程但是问题是当我设置drawable时它添加了一个巨大的填充,我想要的是可绘制的更多在中心而不是在顶部

自定义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

2 个答案:

答案 0 :(得分:0)

这不是填充问题,是因为您将可绘制的宽度和高度设置为200dp

你能使用&#34; wrap_content&#34;在drawable文件中?

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

答案 1 :(得分: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>

并像这样设置drawable

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

而不是

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

修改

正如您所问,您可以使用ProfileGridView wrap_content而不是200dp。使用setCompoundDrawablesWithIntrinsicBounds将drawable附加到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))