Android 防止微调器下拉列表显示

Android 防止微调器下拉列表显示,android,android-spinner,Android,Android Spinner,我使用的微调器的适配器是动态填充的 当有多个项目时,微调器行为是标准行为。单击后,将显示下拉列表,允许用户选择项目 当只有一个项目时,我希望防止出现下拉列表,并捕获click事件以执行操作 我找不到阻止默认行为的解决方案(即单击时仅显示一个项目的下拉列表)。有什么办法吗? 谢谢你。。。如果微调器中只有一项,请尝试使用setClickable(fasle)或setEnabled(false) 试试这个 public class SpinnerActivity extends Activity

我使用的微调器的适配器是动态填充的

  • 当有多个项目时,微调器行为是标准行为。单击后,将显示下拉列表,允许用户选择项目
  • 当只有一个项目时,我希望防止出现下拉列表,并捕获click事件以执行操作
我找不到阻止默认行为的解决方案(即单击时仅显示一个项目的下拉列表)。有什么办法吗?
谢谢你。。。如果
微调器中只有一项,请尝试使用
setClickable(fasle)
setEnabled(false)

试试这个

public class SpinnerActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner spinner = (Spinner) findViewById(R.id.spinner1);
        List<String> list = new ArrayList<String>();
        list.add("list 1");
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);

        if (list.size() < 2) {
            spinner.setClickable(false);
            spinner.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        Toast.makeText(SpinnerActivity.this, "Catch it!", Toast.LENGTH_SHORT).show();
                    }
                    return true;
                }
            });
        }


    }
}
公共类SpinnerActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
微调器微调器=(微调器)findViewById(R.id.spinner1);
列表=新的ArrayList();
列表。添加(“列表1”);
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,列表);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
spinner.setAdapter(dataAdapter);
if(list.size()<2){
微调器。可设置可点击(错误);
spinner.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u UP){
Toast.makeText(spinneActivity.this,“抓住它!”,Toast.LENGTH_SHORT.show();
}
返回true;
}
});
}
}
}

为了防止微调器显示下拉列表,我只在onTouch(…)中返回true,如下所示:

    spinner.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return true;
        }
    });

在科特林,我就是这样做的

  <string-array name="coins_array">
    <item>USD</item>
    <item>USDT</item>       
  </string-array>

 
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.main_activity.*


class MainActivity: AppCompatActivity(), AdapterView.OnItemSelectedListener{
    private var touchEvent = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)

        ArrayAdapter.createFromResource(this, R.array.coins_array, android.R.layout.simple_spinner_item
        ).also { adapter ->
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            coin_choice.adapter = adapter
        }
        coin_choice.onItemSelectedListener = this

    }

    override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
        if(touchEvent){
            val coin: String = parent.getItemAtPosition(position).toString()
            Toast.makeText(this, coin, Toast.LENGTH_SHORT).show()
        }
        touchEvent = true
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
    }
}

美元
USDT
导入android.os.Bundle
导入android.view.view
导入android.widget.AdapterView
导入android.widget.ArrayAdapter
导入android.widget.Toast
导入androidx.appcompat.app.appcompat活动
导入kotlinx.android.synthetic.main.main_活动*
类MainActivity:AppCompativeActivity(),AdapterView.OnItemSelectedListener{
private var touchEvent=false
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.main_活动)
ArrayAdapter.createFromResource(这个,R.array.coins\u数组,android.R.layout.simple\u微调器\u项
)。另外{适配器->
adapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项)
coin_choice.adapter=适配器
}
coin_choice.onItemSelectedListener=此
}
覆盖已选择(父项:AdapterView,视图:view,位置:Int,id:Long){
如果(触摸事件){
val coin:String=parent.getItemAtPosition(位置).toString()
Toast.makeText(this,coin,Toast.LENGTH\u SHORT).show()
}
touchEvent=true
}
覆盖未选择的乐趣(家长:AdapterView?){
}
}

这肯定解决了问题的第一部分(防止微调器下拉列表显示),但由于微调器上没有单击侦听器,且微调器被禁用或不可单击,因此我无法捕获单击事件:(这有一个问题,因为某些版本或供应商会在ACTION_DOWN上显示项目。我认为这在某些设备上有效,但在其他设备上无效。