Android布局中是否有替代HTML的类?

时间:2015-02-25 13:36:32

标签: android android-layout

在Web开发中,可以将class属性设置为某些HTML元素(例如按钮),这样您就可以将一些命令耦合到仅具有此类的元素(例如js listeners,css styles等等..)。

我想在Android中做类似的事情。我有几个按钮,我想设置一些听众以相同的方式在所有这些上工作。我想使用setOnTouchListener,这不能像android:onClick一样简单地添加到布局文件中。 我所知道的唯一方法是定义一个OnTouchListener,然后分别做一些事情:

Button button1  = (Button) findViewById(R.id.button1); 
Button button2 = (Button) findViewById(R.id.button); 
Button button3  = (Button) findViewById(R.id.button3); 

然后

button1.setOnClickListener(myOnTouchListener);
button2.setOnClickListener(myOnTouchListener);
button3.setOnClickListener(myOnTouchListener);

还有其他办法吗?最佳地,我想做一些类似于在JQuery中完成这些事情的事情(例如$(".my-buttons").setListener(...);

关键是我想避免使用R.id或其他

明确说出哪些按钮

2 个答案:

答案 0 :(得分:2)

ButterKnife可能对您有所帮助。它具有@OnClick注释,支持单个绑定中的多个ID以进行常见事件处理。例如,在活动中:

@Override 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    ButterKnife.inject(this);
    // Use "injected" views...
}

@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void handleButtonClick(Button button) {
    // handle clicks
}

onTouchListener中应用常见List注入按钮并定义ButterKnife.Setter操作:

@InjectViews({ R.id.button1, R.id.button2, R.id.button3 })
List<Button> buttons;

static final ButterKnife.Setter<Button, OnTouchListener> SETTER = new ButterKnife.Setter<Button, OnTouchListener>() {
    @Override
    public void set(Button view, OnTouchListener value, int index) {
        view.setOnTouchListener(value);
    }
};

Butterknife.inject(this)申请onTouchListener之后的任何地方:

ButterKnife.apply(buttons, SETTER, onTouchListener);

答案 1 :(得分:1)

您可以遍历整个布局并检查instanceof,但如果您只关心OnClickListener,则可以使用XML实现

<Button android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:onClick="clicked" />

按钮会在附加的clicked(View v)内触发Activity方法(如果方法未命中,则会抛出异常)...您可以将OnClickListener实施为Activity并在XML中直接使用android:onClick="onClick"。在onClick内你也可以使用switch(v.getId())或任何你想要识别哪个View点击了