Могу ли я увеличить количество кнопок на области щелчка программно?
Иногда у меня есть кнопка в пользовательском интерфейсе, которая настолько мала, что ее сложно щелкнуть. Мое решение до сих пор заключалось в том, чтобы добавить прозрачную рамку вокруг кнопки в Photoshop. Просто увеличение заполнения на кнопке не работает, так как это также растягивает изображение. Так как это просто суета, чтобы открывать Photoshop каждый раз, когда я хочу изменить поверхность, на которую можно щелкнуть, есть ли способ сделать это программно? Я попробовал разместить рамку в очереди за кнопкой и сделать ее кликабельной, но тогда кнопка не изменит внешний вид на ощупь, как следует. Конечно, я мог бы также добавить ontouchlistener в framelayout, который изменяет внешний вид кнопок, но тогда это довольно некоторый код, если у меня есть несколько таких кнопок.
Приветствия,
Ответы
Ответ 1
Я только что нашел аккуратный способ решить эту проблему.
- Окружать кнопку с помощью слова LinearLayout, который имеет прописку вокруг кнопки.
- Добавьте тот же onclick в LinearLayout, что и кнопка.
-
В кнопке установите duplicateParentState на true, чтобы выделить кнопку, когда вы нажимаете кнопку за пределами кнопки, но внутри LinearLayout.
<LinearLayout
android:layout_height="fill_parent"
android:onClick="searchButtonClicked"
android:layout_centerVertical="true"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="30dp">
<Button
android:id="@+id/search_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_button_selector"
android:textColor="#fff"
android:text="Search"
android:focusable="true"
android:textStyle="bold"
android:onClick="searchButtonClicked"
android:layout_gravity="center_vertical"
android:duplicateParentState="true"/>
</LinearLayout>
Ответ 2
Я лично, я бы использовал TouchDelegate. Это позволяет вам иметь дело с мишенью касания, а визуальный обзор ограничивается двумя разными способами. Очень удобно...
http://developer.android.com/reference/android/view/TouchDelegate.html
Ответ 3
Это очень поздно "я тоже", но, придя к этому и другим вопросам, которые искали решение, я нашел простое, элегантное решение.
Другой question жаловался, что прозрачный фон их изображения не доступен для кликов. Если это проблема, похоже, это тоже обойти.
Здесь кнопка:
<ImageButton
android:id="@+id/arrowUp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/arrow_up"
android:background="@drawable/clear_button_background" />
Соответствующие строки - последние два. "@drawable/arrow_up"
- это несколько состояний кнопок в файлах *.png, определенных в файле *.xml с возможностью вырезания:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true"
android:drawable="@drawable/tri_up_blue" /> <!-- pressed -->
<item android:state_selected="true"
android:drawable="@drawable/tri_up_blue" /> <!-- selected -->
<item android:state_focused="true"
android:drawable="@drawable/tri_up_blue" /> <!-- focused -->
<item android:drawable="@drawable/tri_up_green" /> <!-- default -->
</selector>
Просто ваша основная кнопка. Ничего особенного. И "@drawable/clear_button_background"
это только:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
<size android:width="20dp" android:height="30dp" />
</shape>
Высота и ширина здесь являются областью, которой можно щелкнуть, при необходимости измените размер. Вы можете использовать его столько раз, сколько нужно в одном представлении, в отличие от абсурдно подробного TouchDelegate. Нет дополнительных слушателей. Он не добавляет никаких просмотров или групп в вашу иерархию, и вы не будете возиться с заполнением и полями весь день.
Simple. Элегантный.
Ответ 4
Я думаю, что ваше решение является лучшим из доступных на данный момент, если вы не хотите углубляться в некоторые вещи Android и перехватывать все motionEvent и TouchEvents самостоятельно, а затем вам также нужно будет вызвать нажатый и т.д.
Просто создайте девять патч-изображений с растяжимой прозрачной рамкой. Таким образом, вы можете изменить размер изображения без необходимости изменения самого изображения, и ваша кнопка будет расти или уменьшаться без изменения фактического отображаемого фона.
Ответ 5
Идея заключается в том, чтобы сделать новый прозрачный образ и поместить на него значок, чтобы область касания была больше и дизайн выглядел идеально. Проверьте изображение
Спасибо.
Ответ 6
Просто добавьте дополнение к макету вместо Margin
<ImageView
android:id="@+id/back_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="25dip"
android:src="@drawable/back_btn" />
Ответ 7
Возможно, вы могли бы сделать это, посмотрев на координаты X и Y MotionEvent, переданные в onTouchEvent?