Пользовательская кнопка с двумя TextView

Я пытаюсь настроить кнопку с двумя 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, то, что я получил, является пустой кнопкой без текста.

Любые идеи, спасибо.

Вы можете использовать Layout как кнопку, установив стиль пользовательской кнопки ur в макет и можете добавить к нему два текстовых элемента:

 <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); 

Вы можете вывести новый класс из Button и переопределить метод onDraw (Canvas 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); } }