Кнопка Android со значком и текстом


у меня есть некоторые кнопки, как это в моем приложении:

    <Button
        android:id="@+id/bSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:text="Search"
        android:textSize="24sp" />

Я пытаюсь создать кнопку с текстом и иконкой. android: drawableLeft не работает для меня (возможно, это было бы, но я не знаю, как установить максимальную высоту значка).

поэтому я создал LinearLayout с ImageView и TextView и сделал его похожим на кнопку:

    <LinearLayout
        android:id="@+id/bSearch2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/btn_default"
        android:clickable="true"
        android:padding="16dp"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:adjustViewBounds="true"
            android:maxHeight="30dp"
            android:maxWidth="30dp"
            android:scaleType="fitCenter"
            android:src="@drawable/search_icon" />

        <TextView
            android:id="@+id/tvSearchCaption"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textSize="24sp"
            android:paddingRight="30dp"
            android:gravity="center"
            android:text="Search" />
    </LinearLayout>

моя новая кнопка-это именно то, что я хочу (размер шрифта, иконку и размещения текста). Но это не похоже на мой дефолт кнопки:

поэтому я попытался изменить фон и цвет текста моей новой кнопки:

Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());

это дает странный результат, моя старая кнопка, путается:

когда я меняю порядок этих двух кнопок в XML, так что" новая кнопка " идет первым, это делает еще один странный результат:

Теперь я заметил, что когда я пытаюсь нажать старую кнопку, Новая получает прессованный.

какие идеи?

4 58

4 ответа:

попробуйте этот.

<Button
    android:id="@+id/bSearch"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:text="Search"
    android:drawableLeft="@android:drawable/ic_menu_search"
    android:textSize="24sp"/>

чтобы добавить изображение слева, справа, сверху или снизу, вы можете использовать следующие атрибуты:

android:drawableLeft
android:drawableRight
android:drawableTop
android:drawableBottom

пример кода приведен выше. Вы также можете достичь этого с помощью относительной компоновки.

для тех, кто хочет сделать это динамически, то setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) на кнопках предмета поможет.

пример

Button search = (Button) findViewById(R.id.yoursearchbutton);
search.setCompoundDrawables('your_drawable',null,null,null);

@Liem Vo правильно, но если вы используете End / Start вместо Right / Left Android studio оценит это :)

<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:drawableStart="@android:drawable/ic_menu_search"
android:textSize="24sp"/>