Android: изменение фона при нажатии на спиннер - PullRequest
0 голосов
/ 02 июля 2019

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

Label1  Spinner1
Label2  Spinner2
Label3  Spinner3

Когда нажимаете, скажем, Spinner1, я хочу, чтобы весь ряд, т.е.измените их цвет фона, скажем, если я возьму его в LinearLayout. Так при щелчке по спиннеру фон должен смениться на синий

Я хочу, вероятно, XML-способ изменения фона всего макета, а не программный, поскольку мне придется кодироватьдля каждого счетчика

Может кто-нибудь сказать мне, как мне изменить весь цвет макета одним щелчком мыши

Я попробовал Spinner.setOnItemSelectedListener, но это срабатывает только при выборе какого-либо элемента, но я хочумакет для изменения цвета даже при нажатии Spinner

Spinner в макете layout.xml

<LinearLayout
                android:id="@+id/linearlay"
                android:layout_width="320dp"
                android:layout_height="40dp"

                android:background="@drawable/bg_spinner_pressed">

                <TextView
                    android:id="@+id/label"
                    android:layout_height="40dp"
                    android:layout_marginLeft="15dp"
                    android:gravity="center_vertical"
                    android:text="Label"
                    android:textColor="@color/textColorPrimary"
                    android:textSize="14dp" />

                <Spinner
                    android:id="@+id/spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:popupBackground="@color/colorPrimary"
                    android:textColor="@android:color/white"
                    android:textSize="20sp"/>
            </LinearLayout>

Файл Settings.java

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    Log.e("Techie","----------------------------citizenship1----------------------------");

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    Log.e("Techie","----------------------------citizenship2----------------------------");

                }
            });

Я ожидаю макетс id linearlay должен изменить свой основной цвет белый, чтобы изменить на синий при нажатии кнопки.пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вызовите setonTouchListener и обработайте события «вниз» и «вверх», чтобы изменить цвета

spinner.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            Log.e("Techie", "----------------------------Action down----------------------------");
                            layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.color1));
                            break;

                        case MotionEvent.ACTION_CANCEL:
                            Log.e("Techie", "----------------------------Cancel----------------------------");
                            layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.color2));
                            break;
                    }

                    // allow target view to handle click
                    return false;
                }

            });
0 голосов
/ 02 июля 2019

Если вы хотите изменить цвет, когда щелкнул любой спиннер, вы можете сделать это -

  spinner.setOnTouchListener(new OnTouchListener(){

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //HERE YOU CAN CHANGE COLOR OR BG COLOR as per your need
            textView.isEnabled = true
          linearlay.setBackgroundColor(ContextCompat.getColor(linearlay.context, R.color.tealish))   
        return false;
    }

});
...