GUI问题,触摸“button2”在某些设备上执行“button1”操作

时间:2011-12-04 14:10:41

标签: android user-interface

我的应用程序中有以下布局,最小API级别为4,目标API级别为8.事实是,在某些设备(如Xperia X10 mini)中,当我触摸@ + actBula / btnZoomOut时,所采取的操作是从它旁边的按钮@ + actBula / btnZoomIn。而在Xperia X8和其他三星手机中,它的效果非常好。

Xperia X10 mini的规格为240 x 320像素,2.55英寸(~157 ppi像素密度)。 Xperia X8是320 x 480像素,3.0英寸(~92 ppi像素密度)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linearLayout1" android:scrollbarAlwaysDrawVerticalTrack="true" android:layout_width="fill_parent">
  <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout3" android:layout_width="fill_parent">
    <LinearLayout android:id="@+id/linearLayout4" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="left">
        <Button android:id="@+actBula/btnBack" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="10dp" android:paddingTop="10dp" android:layout_marginLeft="10dp" android:background="@drawable/setabola48" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"></Button>
    </LinearLayout>
    <LinearLayout android:id="@+id/linearLayout5" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="right" android:layout_gravity="right" android:orientation="horizontal" android:layout_marginLeft="50dp">
        <Button android:id="@+actBula/btnZoomIn" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/zoomp48" android:layout_marginTop="5dp"></Button>
        <Button android:id="@+actBula/btnZoomOut" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginLeft="20dp" android:background="@drawable/zoomm48" android:layout_marginTop="5dp"></Button>          
    </LinearLayout>
  </LinearLayout>
<ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="wrap_content">
    <LinearLayout android:layout_width="fill_parent" android:id="@+id/linearLayout2" android:layout_height="fill_parent" android:orientation="vertical">
        <TextView android:layout_width="wrap_content" (...) ></TextView>
    </LinearLayout>
</ScrollView>

这些是onClick侦听器:

    final TextView myTextView = (TextView) findViewById(R.actBula.txtBula);

    Button btnZoomIn = (Button) findViewById(R.actBula.btnZoomIn);

    btnZoomIn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
          myTextView.setTextSize(myTextView.getTextSize()+1);
        }
    });

    Button btnZoomOut = (Button) findViewById(R.actBula.btnZoomOut);

    btnZoomOut.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
          myTextView.setTextSize(myTextView.getTextSize()-1);
        }
    });

3 个答案:

答案 0 :(得分:1)

我刚刚将此行更改为myTextView.setTextSize(myTextView.getTextSize()-1);myTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, myTextView.getTextSize()-1);

getTextSize()返回确切的像素大小。如果我指定我的单位,我会得到所需的结果。 谢谢无论谁在这里帮助我。

答案 1 :(得分:0)

这听起来像按钮的id在R.java中混淆​​了。在将应用上传到Xperia X10 mini之前,您是否已运行Clean...

由于Android 1.6不太可能,但是尝试暂时将目标API级别更改为4以在Xperia X10 mini上运行应用程序,看看会发生什么。

答案 2 :(得分:0)

您也可以尝试声明ID已放置到标准位置的按钮。我的意思是,将"@+actBula/btnZoomIn"更改为"@+id/btnZoomIn",依此类推。

要澄清的另一件事是按钮获得的实际ID。在代码中添加一些打印输出,并看到按钮id的LogCat将打印:

final TextView myTextView = (TextView) findViewById(R.actBula.txtBula);

Button btnZoomIn = (Button) findViewById(R.actBula.btnZoomIn);

//That's what I added:
Log.i("", "btnZoomIn.getId()=" + btnZoomIn.getId() + ", R.actBula.btnZoomIn=" + R.actBula.btnZoomIn);

btnZoomIn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      myTextView.setTextSize(myTextView.getTextSize()+1);
    }
});

Button btnZoomOut = (Button) findViewById(R.actBula.btnZoomOut);

//That's what I added:
Log.i("", "btnZoomOut.getId()=" + btnZoomOut.getId() + ", R.actBula.btnZoomOut=" + R.actBula.btnZoomOut);

btnZoomOut.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      myTextView.setTextSize(myTextView.getTextSize()-1);
    }
});