Intereting Posts
Создание zip-файла с некоторыми файлами на SDCard Intent.ACTION_HEADSET_PLUG принимается, когда начинается действие Прототип прототипа (ленивая сериализация) API Android-MPChartLibrary не может переопределить значение по умолчанию «Нет доступных данных данных диаграммы» Как установить разные столбцы для строк в gridview Есть ли API для получения отчета о продажах в Google Play? Очистить задний стек с помощью фрагментов Что именно делает Stopself ()? Каков наилучший способ прекратить работу службы? Нет доступа в Интернет на Android эмулятор, общее подключение к Интернету «Не найдено активных совместимых AVD или устройств Фрагмент Android с действиями внутри Как автоматически принимать Wi-Fi Прямые запросы на подключение в Android Сохранить изображение подписи к файлу в Родосе на Android Изменения SSL в андроид-kitkat, поддерживающие соединение от работы? Как удалить смс из папки «Входящие»?

Пользовательская кнопка с двумя 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); } }