Подтвердить что ты не робот

Как создать прядильщик Android без треугольника в правой части виджета

У меня есть экран, на котором у пользователя есть много элементов для ввода, поэтому пространство экрана стоит.

Я хочу, чтобы вид виджета на экране (до того, как пользователь нажимал его), был похож на EditText или левую часть виджета Spinner (без нормального треугольника) на правой стороне Spinner. Затем, когда пользователь нажимает на виджет, он/она получит нормальный диалог выбора Spinner.

Есть ли какой-либо атрибут стиля Spinner, который я могу изменить, чтобы выполнить это?

Мне не удалось увидеть такой код.

Спасибо

4b9b3361

Ответ 1

Одна вещь, которую вы можете сделать, это взять исходный код Spinner из базы данных Android и вместе с соответствующими макетами и ресурсами и использовать их для создания собственного пользовательского виджета (возможно, вам нужно будет удалить стрелку только из макета и немного измените код в зависимости от ваших потребностей).

EDIT: Вы правы, после этого сообщения это было действительно просто:) Вы должны сделать две вещи. Сначала создайте файл styles.xml под res/values, откройте его и добавьте следующее:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style parent="@android:style/Widget.Spinner" name="SpinnerAsEditText">
        <item name="android:background">@android:drawable/edit_text</item>
    </style>
</resources>

Далее, в вашем макете, добавьте Spinner, как это:

<Spinner style="@style/SpinnerAsEditText" anyOtherAttributeYouNeed="..."></Spinner>

Что это, теперь счетчик будет выглядеть как простой EditText, без этой немыслимой и раздражающей стрелки вниз.

Ответ 2

Это довольно старый вопрос, но я думаю, что все еще актуально, поэтому вот мой ответ:

Простейший метод

Ответ lencinhaus правильный. Он работает, но это можно сделать еще проще: просто добавьте еще один фон. В приведенном ниже примере используется стандартный фон Button для более однородного внешнего вида:

<Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:prompt="@string/my_prompt" 
    android:background="@android:drawable/btn_default"
    />       

Syle, используемый в другом ответе, не более, чем применение фона к виджету. Это можно сделать непосредственно с помощью виджета, сохраняя необходимость в новом XML файле. Конечно, если вы собираетесь применять стиль к счетчику в любом случае, нет ничего плохого в этом подходе.

Почему?

Ключ, чтобы понять, как он работает, заключается в описании PNG с 9 патчами. Строки справа и внизу используются для заполнения, т.е. Для сохранения некоторого пространства в его содержимом. В этом случае текст внутри. Стандартный фон Spinner использует изображение со стрелкой справа, которая находится за пределами полезной текстовой области. См. Рисунок 1 ниже для иллюстрации:

Рисунок 1. Исходный Spinner bacground 9-patch PNG http://i56.tinypic.com/3026kw4.png
Рисунок 1. Оригинальный Spinner bacground 9-patch PNG.

Просто удаление стрелки недостаточно, так как там остается пробел. Вам нужно использовать новое 9-патч-изображение с уменьшенным отступом (см. Рисунок 2 для примера, основанном на рисунке 1), или использовать одно из предварительно скомпилированных изображений с 9 патчами без большого количества отступов, например, для EditText (@android:drawable/edit_text) или Button ( @android:drawable/btn_default).

Рисунок 2. Модифицированный фильтр Spacer с 9 патчами PNG с уменьшенным дополнением http://i52.tinypic.com/2jfaxkw.png
Рисунок 2. Измененный Spinner bacground 9-patch PNG с уменьшенным заполнением.

Понимание этого позволит вам создать свой собственный фон для Spinner (и, фактически, для любого виджета).

Более подробное описание файлов с 9 патчами можно найти здесь

Очень легко создать файлы с исполняемым файлом draw9patch из SDK (читать об этом здесь), но ничто не мешает вам вместо этого используйте Photoshop или Gimp. Помните, что 9-патч-PNG - это просто PNG! Единственное предостережение - убедиться, что вы рисуете только внешние линии пикселей и что остальные пиксели полностью прозрачны. Сглаживание вблизи границы может дать неожиданные результаты.

Ответ 3

Я только что пришел к этому вопросу, потому что мой счетчик не показывал индикатор треугольника, теперь я понимаю, почему: я устанавливал фон на "белый":

android:background="#FFFFFFFF"

Это удаляет индикатор треугольника (фоновое изображение счетчика и дополнение, указанное Алеадом).

Для моей проблемы я решил добавить родительский LinearLayout, чтобы установить фон в "белый".

Ответ 4

Дайте ему фон, стрелка исчезнет.

android:background="@drawable/bg"

Ответ 5

В связи с проблемой пространства, когда вы нажимаете на spinner, я случайно обнаружил, что вы можете удалить эти большие индикаторы выбора справа. Вы получаете основной список, разделенный линиями, но вы можете щелкнуть по элементу, и он все еще работает.

Настройте такой счетчик, чтобы получить индикаторы выбора:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.petals, android.R.layout.simple_spinner_item);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter1);

Без индикаторов просто не указывать строку setDropDownViewResource.

Ответ 6

У меня была та же проблема и изменил стиль на:

style="@style/Widget.AppCompat.Light.DropDownItem.Spinner"

и он работал.

Как нечетно, Его расположено в DropDownItem.

В то время как тот, у которого есть нижний треугольник, называется нормальным.

Ура!

Ответ 7

почему бы вам не пойти на диалог со списком. В соответствии с вашим требованием создайте поле edittext, добавьте setOnFocusChangeListener, а затем отобразите диалог со списком в методе onFocusChange(). Для диалога со списком

new AlertDialog.Builder(this)
                .setTitle("<Title>")
                .setItems(R.array.<ItemsArrayName>, new DialogInterface.OnClickListener(){
     @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub  
}}).show();