自定义按钮有两个TextView

时间:2011-09-07 04:33:53

标签: android

我正在尝试在一个按钮内使用两个带有不同字体的TextView自定义按钮。为此,我只是扩展了Button,并在构造函数中编写了以下代码,

LayoutInflater layoutInflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = layoutInflater.inflate(R.layout.custom_button,
        (ViewGroup) findViewById(R.id.custom_button_view));

TextView firstTextView = (TextView) layout
        .findViewById(R.id.firstTextView);
TextView secondTextView = (TextView) layout
        .findViewById(R.id.secondTextView);

在布局custom_button中我放置了两个不同字体和文本的TextView,custom_button_view是该LinearLayout的ID,我得到的是一个没有文字的空按钮。

任何想法,谢谢。

3 个答案:

答案 0 :(得分:8)

您可以通过将自定义按钮样式设置为布局来使用布局作为按钮,并可以向其中添加两个textView,这样:

<LinearLayout android:id="@+id/customButtonLayout"
    android:layout_height="wrap_content" style="@android:style/Widget.Button"
    android:layout_width="wrap_content">
    <TextView android:text="First" android:id="@+id/firstTextView"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:textColor="#000"></TextView>
    <TextView android:textColor="#000" android:text="Second"
        android:layout_height="wrap_content" android:id="@+id/secondTextView"
        android:layout_width="wrap_content" android:layout_marginLeft="10dp"></TextView>
</LinearLayout>

在Activity中你可以设置不同的字体:

    Typeface font=Typeface.createFromAsset(getAssets(),"ARIALN.TTF") ;   
    Typeface font2=Typeface.createFromAsset(getAssets(), "COMPCTAN.TTF");

    TextView firstTextView = (TextView)findViewById(R.id.firstTextView);
    TextView secondTextView = (TextView)findViewById(R.id.secondTextView);

    firstTextView.setTypeface(font);
    secondTextView.setTypeface(font2);

    LinearLayout btnLayout=(LinearLayout) findViewById(R.id.customButtonLayout);
    btnLayout.setOnClickListener(this);

答案 1 :(得分:2)

您可以从Button派生一个新类并覆盖onDraw(Canvas画布)方法。我做了一个带有图标和文本的按钮,它没有任何xml。主要问题是将文本写在按钮上的好位置。为此,您可以使用Paint.getTextBounds()函数来获取文本尺寸。

使用LayoutInflater可能是一种更好的做法,但我没有设法让它工作。

public class CustomButton extends Button {

    private int     mWidth;
    private int     mHeight;
    private Bitmap  mBitmap;
    private String  mText;

    private Paint   mPaintIcon;
    private Rect    mRectIconSrc;
    private Rect    mRectIconDst;
    private Paint   mPaintText;

    public CustomButton(Context context, Bitmap bitmap, int width, int height, String text) {
        super(context);

        mBitmap = bitmap;
        mWidth = width;
        mHeight = height;
        mText = text;
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);
        setLayoutParams(params);

        mPaintIcon = new Paint();
        mRectIconSrc = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
        mRectIconDst = new Rect(0, 0, mHeight, mHeight);

        mPaintText = new Paint();
        mPaintText.setColor(0xFF778800);
        mPaintText.setTextSize(30);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawBitmap(mBitmap, mRectIconSrc, mRectIconDst, mPaintIcon);
        canvas.drawText(mText, mWidth/4, mHeight*2/3, mPaintText);
    }

}

答案 2 :(得分:0)

您可以使用button包围FrameLayout,然后在textview中添加FrameLayout。您可以管理活动中的字体。如果文字没有显示尝试使用bringToFront()

布局:

 <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            android:id="@+id/button_frame"
            >
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/button_border"
            android:gravity="center"
            android:onClick="onClick"
            android:text="@string/get_more"
            android:id="@+id/get_more"
            android:stateListAnimator="@null"

        />

            <TextView
                android:id="@+id/linearTimer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="right"
                android:padding="10dp"
                android:text="123"
             >
    </FrameLayout>

的活动:

 countDownView = (TextView) findViewById(R.id.linearTimer);
 Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/digital-7.ttf");
 countDownView.setTypeface(tf);
 countDownView.bringToFront();