Android - Как отобразить счетчик со значением, но отобразить другой - PullRequest
4 голосов
/ 02 апреля 2012

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

Вот изображение того, что у меня есть сейчас: enter image description here

Как вы можете видеть, я поместил небольшое '>' и несколько пробелов для имитации дерева. Теперь я хочу, чтобы пользователь выбрал запись, чтобы отобразить значение без этих символов.

Сегодня счетчик отображает значение следующим образом: enter image description here

Слово "> Супермаркет", но я хочу сказать "Супермаркет", и только это. Есть ли способ изменить выбранное значение, отображаемое счетчиком, но не список?

Надеюсь, вы сможете мне помочь.

Привет.

V.

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Вы можете сделать это с идеей, что

сделает ваш спиннер невидимым, поместите textView за спиннером, установите TextView для текста, чтобы выбранный элемент вращался с

textView.settext(spinner.getSelectedItem().replace(">","").trim()));

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

2 голосов
/ 03 апреля 2012

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

Сначала замените свой счетчик на следующую часть кода:

<RelativeLayout
    android:layout_width="190dp"
    android:layout_height="40dp"
    android:layout_marginRight="5dp">    

    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:background="@drawable/custom_spinner"
        android:visibility="invisible" />

    <Button
        android:id="@+id/fake_btn"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/custom_spinner" />

    <TextView
        android:id="@+id/fake_text"
        android:layout_width="140dp"
        android:layout_height="40dp"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical"
        android:textColor="#000000" />

</RelativeLayout>

Создайте новый XML-файл в папке для рисования с именем custom_spinner.xml и поместите этот код:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

     <item
         android:state_focused="true" 
         android:state_pressed="false" 
         android:drawable="@drawable/spinner_pressed" />

    <item
        android:state_focused="true" 
        android:state_pressed="true"
        android:drawable="@drawable/spinner_pressed" />

    <item
        android:state_focused="false" 
        android:state_pressed="true"
        android:drawable="@drawable/spinner_pressed" />

    <item
        android:drawable="@drawable/spinner_normal" />

</selector>

Загрузите эти две картинки и добавьте их в свою папку для рисования (spinner_pressed.9.png и spinner_normal.9.png):

spinner_pressed.9.png spinner_normal.9.png

В своей деятельности добавьте следующие переменные:

private Spinner spinner;
private Button fake_btn;
private TextView fake_text;

В методе onCreate добавьте:

spinner = (Spinner) findViewById(R.id.spinner);
fake_btn = (Button) findViewById(R.id.fake_btn);
fake_text = (TextView) findViewById(R.id.fake_text);

fake_btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v)
    {
        spinner.performClick();
    }
});

spinner_manual.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView parentView, View childView, int position, long id)
    {           
        String value = (String) spinner.getItemAtPosition(position);
        fake_text.setText(value);
    }
    public void onNothingSelected(AdapterView parentView) {}  
});

Вот, пожалуйста, оно должно работать.

...