如何在Spinner的下拉菜单打开时实现transperent背景视图

时间:2016-12-14 06:48:15

标签: android android-layout spinner

如图所示,我希望在微调器点击(图像1)时获得作为背景的transperent视图。当选择项目时返回正常视图(图像2)

我尝试了以下方法,但是工作得很好。 任何人都有任何想法!! ..任何帮助都会得到赞赏。感谢

spinnerrelevence.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    //first way
                    mRoot.setBackgroundColor(getResources().getColor(R.color.transperent));

                    //second way                   
                    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

                    //third way
                    getApplication().setTheme(R.style.Theme_Transparent);


                    //fourth way
                    getWindow().setBackgroundDrawableResource(R.color.transperent);
                }
                return false;
            }
        });

在style.xml中:

<!--for transperent activity-->
<style name="Theme.Transperent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

enter image description here

enter image description here)。

3 个答案:

答案 0 :(得分:1)

您可以使用根布局来设置透明度,例如,如果您将线性布局作为该屏幕的根布局,那么设置alpha(51),以便在点击微调器项目时获得透明度并删除alpha选择微调器项目。

或者您可以使用以下代码来调暗背景

  WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
        p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        p.dimAmount = 0.3f;
        wm.updateViewLayout(container, p);

用您的视图替换容器。

答案 1 :(得分:0)

这是技巧,你可以做到这一点来实现你想要的 您可以在“警报”对话框中进行微调,并执行此操作,这将根据您的需要创建透明背景

 LayoutInflater li = LayoutInflater.from(context);

                View promptsView = li.inflate(R.layout.my_dialog_layout, null);

                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

                alertDialogBuilder.setView(promptsView);

                // create alert dialog
                final AlertDialog alertDialog = alertDialogBuilder.create();

                final Spinner mSpinner= (Spinner) promptsView
                        .findViewById(R.id.mySpinner);


                // reference UI elements from my_dialog_layout in similar fashion

                mSpinner.setOnItemSelectedListener(new OnSpinnerItemClicked());

                // show it
                alertDialog.show();
                alertDialog.setCanceledOnTouchOutside(false);

my_dialog_layout 是您包含Spinner mySpinner的弹出式布局

public class OnSpinnerItemClicked implements OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> parent,
                View view, int pos, long id) {
            Toast.makeText(parent.getContext(), "Clicked : " +
                    parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();


        }

        @Override
        public void onNothingSelected(AdapterView parent) {
            // Do nothing.
        }
    }

答案 2 :(得分:0)

默认情况下,Spinner的显示样式将采用下拉菜单的形式。我们还可以在对话框中显示微调器。 如果以对话框的形式打开它,就可以达到你想要的效果。

只需在你的spinner xml

中添加它
android:spinnerMode="dialog"

希望这会对你有所帮助。