用简短的方法引用很多按钮

时间:2012-09-24 14:42:00

标签: android button

我正在为Android设计键盘。 我刚刚通过在MainActivity中实现View.OnTouchListener来学习这种在onCreate方法中定义按钮的简洁方法:

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

    defineButtons();


    keyC.setOnTouchListener(this);
//etc..

}

然后:

    private void defineButtons()
{

    keyC = (Button) findViewById(R.id.c);
//etc..
}

然后我会定义当这种方法触摸按钮时会发生什么:

public boolean onTouch(View view, MotionEvent motion)
{
    int note = 0;

    switch(view.getId())
    {

    case R.id.c:    /** Note C*/
    {
        note = 60 + transposeOctave;
        motionTracker(view, motion, note);
    }
    break;
//etc...
}

这个最后一个方法必须分别对每个按钮重复,这看起来很难看。 我可以使用Id返回一个数值来修改我的音符值吗?

干杯

3 个答案:

答案 0 :(得分:1)

您的密钥是用XML定义的吗?如果是这样,我只需为每个具有正确数值的tag添加android:tag="1" ,如下所示:

int note = 0;
int tagValue = 0;

//Tags in XML are always strings
String tag = (String)view.getTag();

//Parse it to an integer
tagValue = Integer.parseInt(tag);

note = tagValue + transposeOctave;
motionTracker(view, motion, note);

然后,在您的代码中,您可以简单地执行此操作:

{{1}}

答案 1 :(得分:0)

您无法强制ID为特定值。在Android中无法做到这一点,Android资产包装工具(AAPT)将始终自动为您生成它们。

但你仍然可以隐藏函数中从常量到整数的“丑陋”转换。例如:keyboardIdToFrequency()

答案 2 :(得分:0)

您可以使用

将特定值添加为Tag
btn.setTag("something");

并在onTouch中使用

Button btn = (Button)view;

String val = btn.Gettag();
note = Integer.Valueof(val)+ transposeOctave;