Android:单击微调器时更改背景

时间:2019-07-02 12:23:02

标签: android android-linearlayout android-spinner

我有3个用于国家,时区和语言的微调器,各自的标签以下面的方式一个接一个地排列

Label1  Spinner1
Label2  Spinner2
Label3  Spinner3

当点击说Spinner1时,我希望整行,即标签和微调器更改其背景颜色,例如,如果将其放入LinearLayout中,那么在微调器上单击,背景应更改为蓝色

我可能想要一种XML方式来更改整个布局的背景,而不是编程方式,因为我必须为每个微调器进行编码

有人可以告诉我如何通过单击微调器来更改整个布局颜色

我尝试了Spinner.setOnItemSelectedListener,但这仅在我选择某些项目时才起作用,但是我希望即使在按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 :(得分:0)

如果要在单击任何微调器时更改颜色,可以执行此操作-

  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;
    }

});

答案 1 :(得分:0)

调用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;
                }

            });