Android的微调不工作的三星设备与Android 5.0

编程入门 行业动态 更新时间:2024-10-13 08:24:05
本文介绍了Android的微调不工作的三星设备与Android 5.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用的是自定义的微调部件与下面的code。 一切工作正常,除了三星的设备与Android 5.0的大多数设备。在单击微调应显示值的列表,但是这并没有发生。 在仿真器和其他品牌与Android 5.0设备的正常工作。

I'm using a custom Spinner widget with the code below. Everything works fine on most devices except on Samsung's devices with Android 5.0. On click the Spinner should display a list of values but that doesn't happen. On emulators and others brands devices with Android 5.0 it works fine.

有没有人遇到一个类似的ISSE或有可能发生的事任何想法?

Has anyone faced a similiar isse or have any idea of what might be happening?

XML

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

<Spinner android:id="@+id/_combo_spinner" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:focusable="false" android:background="@null" android:clickable="false" android:paddingBottom="@dimen/cell_text_section_text_padding_bottom" android:paddingLeft="@dimen/cell_text_section_text_padding_left" android:paddingRight="@dimen/cell_text_section_text_padding_right" android:paddingTop="@dimen/cell_text_section_text_padding_top" android:spinnerMode="dropdown" /> <View android:layout_width="@dimen/drawable_stroke_width" android:layout_height="match_parent" android:layout_marginBottom="5dp" android:layout_marginTop="3dp" android:background="@color/stroke_dark_grey" android:paddingBottom="@dimen/cell_text_section_text_padding_bottom" android:paddingTop="@dimen/cell_text_section_text_padding_top" /> <ImageView style="@style/image__default" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center" android:layout_marginLeft="@dimen/cell_text_section_text_padding_left" android:layout_marginRight="@dimen/cell_text_section_text_padding_right" android:src="@drawable/ic_action_expand" />

Java的

public class ComboBoxView extends LinearLayout { private Spinner mSpinner; private OnItemSelectedListener mListener; public ComboBoxView(Context context) { super(context); initializeLayout(context); } public ComboBoxView(Context context, AttributeSet attrs) { super(context, attrs); initializeLayout(context); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public ComboBoxView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initializeLayout(context); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public ComboBoxView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initializeLayout(context); } // Internal methods: /** * Initializes the layout * * @param context */ private void initializeLayout(final Context context) { mListener = null; // Inflate and retrieve the views: this.setOrientation(LinearLayout.VERTICAL); LayoutInflater.from(context).inflate(R.layout.view_combo_box, this); mSpinner = (Spinner) findViewById(R.id._combo_spinner); // Finish initialization: final int paddingTop = (int) getResources().getDimension(R.dimen.cell_text_section_text_padding_top); final int paddingBottom = (int) getResources().getDimension(R.dimen.cell_text_section_text_padding_bottom); final int paddingLeft = (int) getResources().getDimension(R.dimen.cell_text_section_text_padding_left); final int paddingRight = (int) getResources().getDimension(R.dimen.cell_text_section_text_padding_right); setOnClickListener(onClick); setOrientation(LinearLayout.HORIZONTAL); setBackgroundResource(R.drawable.button_primary); setClickable(true); setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return true; } private final OnClickListener onClick = new OnClickListener() { @Override public void onClick(View v) { mSpinner.performClick(); } }; @Override public void clearFocus() { super.clearFocus(); mSpinner.clearFocus(); } // External methods: /** * Interface definition for a callback to be invoked when * an item in this view has been selected (extracted from {@link AdapterView.OnItemSelectedListener}). */ public interface OnItemSelectedListener { /** * <p>Callback method to be invoked when an item in this view has been * selected. This callback is invoked only when the newly selected * position is different from the previously selected position or if * there was no selected item.</p> * <p/> * Impelmenters can call getItemAtPosition(position) if they need to access the * data associated with the selected item. * * @param parent The ComboBoxView where the selection happened * @param position The position of the view in the adapter * @param id The row id of the item that is selected */ void onItemSelected(ComboBoxView parent, int position, long id); /** * Callback method to be invoked when the selection disappears from this * view. The selection can disappear for instance when touch is activated * or when the adapter becomes empty. * * @param parent The ComboBoxView that now contains no selected item. */ void onNothingSelected(ComboBoxView parent); } public void setValuesAsString(final List<String> newValues) { setValuesAsString(newValues, 0); } public void setValuesAsString(final List<String> newValues, int initialValue) { List<CharSequence> result = new ArrayList<CharSequence>(newValues.size()); for(String value : newValues) { result.add(value); } setValues(result, initialValue); } public void setValues(final List<CharSequence> newValues) { setValues(newValues, 0); } public void setValues(final List<CharSequence> newValues, int initialValue) { if((initialValue >= newValues.size()) || (initialValue < -1)) { IllegalArgumentException ex = new IllegalArgumentException("Invalid value for initialValue"); LOG.error(LOG.SOURCE.UI, "Invalid",ex); throw ex; } // Prepare the list of elements: // NOTE: The last item in ComboBoxArrayAdapter must be empty. Items should also contain the // same number of lines as the "tallest" entry: final List<CharSequence> finalValues = new ArrayList<CharSequence>(newValues.size()); finalValues.addAll(newValues); int maxLines = 1; for(CharSequence text : newValues) { final String[] lines = text.toString().split("\r\n|\r|\n"); maxLines = Math.max(maxLines, lines.length); } finalValues.add(""); // Prepare spinner: final ComboBoxArrayAdapter adapter = new ComboBoxArrayAdapter(this.getContext(), R.layout.view_combo_box_item, finalValues); adapter.setDropDownViewResource(R.layout.view_combo_box_item_dropdown); adapter.setMaxLines(maxLines); mSpinner.setOnItemSelectedListener(null); mSpinner.setAdapter(adapter); mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { boolean firstSelection = true; @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (mListener != null) { int index = (position >= (mSpinner.getCount() - 1)) ? -1 : position; mListener.onItemSelected(ComboBoxView.this, index, id); } } @Override public void onNothingSelected(AdapterView<?> parent) { if (mListener != null) { mListener.onNothingSelected(ComboBoxView.this); } } }); if (mListener != null) { mListener.onNothingSelected(this); } // Set initial selection: if(initialValue != -1) { mSpinner.setSelection(initialValue); } else { mSpinner.setSelection(newValues.size()); } } public void setOnItemSelectedListener(final OnItemSelectedListener listener) { mListener = listener; } public int getSelectedItem() { int result = mSpinner.getSelectedItemPosition(); if(result >= mSpinner.getCount()) { result = -1; } return result; }

微调

Spinner

例结果 -

Example Result

在此先感谢。

推荐答案

我终于解决了这个问题!_爱 Android的属性点击设置为假,但在ComboBoxView.java文件以下执行的点击行为code:

I finally fixed this! The android property clickable was set to false, but the click behaviour was performed in the ComboBoxView.java file on the following code:

private final OnClickListener onClick = new OnClickListener() { @Override public void onClick(View v) { mSpinner.performClick(); } };

这是工作无处不在(设备和仿真器),除了在三星设备与Android 5.0。这个我想不出为什么。

This was working everywhere (devices and emulators) except on Samsung devices with Android 5.0. This I couldn't figure out why.

之后,我改变了 cliclabke 属性为true,它开始工作。

After I changed the cliclabke property to true it started working.

android:clickable="true"

谢谢你。

Thanks.

更多推荐

Android的微调不工作的三星设备与Android 5.0

本文发布于:2023-11-27 13:28:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1638270.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:设备   工作   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!