具有自定义背景的Android TextView?

时间:2015-09-26 07:17:16

标签: android textview android-relativelayout

我需要一个"按钮"这将具有纹理背景和动态文本。最终结果应该是这样的,但背景是纹理图片。 Custom Button with Text: 我尝试使用内置RelativeLayout的{​​{1}},但问题是结果TextView的宽度/高度不是CustomView

以下是wrap_content XML

custom_button

以下是<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@drawable/custom_button_selector" android:layout_height="match_parent"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_centerInParent="true" /> </RelativeLayout>

Code

这就是我目前使用它的方式,有效

public class CustomButton extends RelativeLayout {

private LayoutInflater mInflater;

private RelativeLayout mContainer;

private TextView mTextView;

public CustomButton(Context context) {
    super(context);
    mInflater = LayoutInflater.from(context);
    customInit(context);
}

public CustomButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    mInflater = LayoutInflater.from(context);
    customInit(context);
}

public CustomButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mInflater = LayoutInflater.from(context);
    customInit(context);
}

private void customInit(Context ctx) {
    mContainer = (RelativeLayout) mInflater.inflate(R.layout.cutom_button_view, this, true);

    mTextView = (TextView) mContainer.findViewById(R.id.tv);
}

public RelativeLayout getContainer() {
    return mContainer;
}

public TextView getTextView() {
    return mTextView;
}
}

但是我想像这样使用它(对于动态文本),并且它赢了

<com.myapp.views.CustomButton
                android:id="@+id/btn"
                android:layout_width="80dp"
                android:layout_height="50dp"/>

它实际上会在整个屏幕上拉伸,忽略布局规则。 如果这个解决方案不是一个好主意,你能否推荐一种可以产生相同结果的替代方案?

2 个答案:

答案 0 :(得分:3)

你需要为此形成文件..

试试这个。

<shape android:shape="rectangle">
    <corners android:radius="56dp" />

    <solid android:color="Color Whaterver You Want" />

    <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>

将此xml文件放在res / drawal文件夹下。

现在只在您的视图中传递此属性..

android:background="@drawable/your file name"

跳到它适合你..

答案 1 :(得分:0)

自定义布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/my_background">

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center" />
</RelativeLayout>

自定义布局java:

public class CustomButton extends FrameLayout {


private RelativeLayout mContainer;

private TextView mTextView;

public CustomButton(Context context) {
    super(context);
    customInit(context);
}

public CustomButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    customInit(context);
}

public CustomButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    customInit(context);
}

private void customInit(Context ctx) {
    LayoutInflater.from(ctx).inflate(R.layout.custom_button_viewa, this, true);
    mContainer = (RelativeLayout) findViewById(R.id.container);
    mTextView = (TextView) findViewById(R.id.tv);
}

public RelativeLayout getContainer() {
    return mContainer;
}

public TextView getTextView() {
    return mTextView;
}
}

现在可以用作:

 <com.androidbolts.databindingsample.model.CustomButton
        android:id="@+id/customButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />