3

合計 4 つのボタンを持つやや単純なレイアウトを作成しました。レイアウトの下部にある 3 つのボタンは (RelativeLayout で) 横に並んでおり、画面のほぼ中央にある巨大なボタンにあります。

Ice Cream Sandwich と Jellybean では、どのボタンをクリックしてもすべて正常に動作します (つまり、それぞれの onClick 関数が呼び出されます) が、奇妙なことに、Gingerbread では下部の 3 つのボタンのいずれかが機能しますが、中央のボタンは機能しません。onClick は多くの命令を起動しますが、私が知る限り実行されているものはありません。呼び出されておらず、その理由もわかりません。

レイアウトのコードを以下に示します。どんな助けでも大歓迎です!

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_off"
android:orientation="vertical"
android:weightSum="10" >

    <ImageButton
        android:id="@+id/button_activate"
        android:layout_width="155dp"
        android:layout_height="0dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="170dp"
        android:layout_weight="7.2"
        android:background="@drawable/transparent"
        android:clickable="true"
        android:contentDescription="@string/app_name"
        android:onClick="activate"
        android:src="@drawable/transparent" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="30dp"
        android:layout_marginTop="80dp"
        android:layout_weight="2" >

        <ImageButton
            android:id="@+id/button_help"
            android:layout_width="90dp"
            android:layout_height="fill_parent"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="0dp"
            android:background="@drawable/transparent"
            android:clickable="true"
            android:contentDescription="@string/app_name"
            android:onClick="openhelp"
            android:src="@drawable/transparent" />


        <ImageButton
            android:id="@+id/button_settings"
            android:layout_width="55dp"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="0dp"
            android:layout_toLeftOf="@+id/button_help"
            android:background="@drawable/transparent"
            android:clickable="true"
            android:contentDescription="@string/app_name"
            android:onClick="opensettings"
            android:src="@drawable/transparent" />


        <ImageButton
            android:id="@+id/button_contact"
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:layout_marginTop="0dp"
            android:layout_toRightOf="@+id/button_help"
            android:background="@drawable/transparent"
            android:clickable="true"
            android:contentDescription="@string/app_name"
            android:onClick="opencontact"
            android:src="@drawable/transparent" />

    </RelativeLayout>

</LinearLayout>

レイアウト (main.xml) を呼び出すアクティビティ:

//bunch of imports

public class MainActivity extends Activity {

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

    LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);

    boolean serviceOn = isMyServiceRunning();

    if(serviceOn==true) layout.setBackgroundResource(R.drawable.main_on);
    else if (serviceOn==false) layout.setBackgroundResource(R.drawable.main_off); 
}

@Override
protected void onResume() {
    super.onResume();
    LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);

    boolean serviceIsOn = isMyServiceRunning();

    if(serviceIsOn==true) layout.setBackgroundResource(R.drawable.main_on);
    else if (serviceIsOn==false) layout.setBackgroundResource(R.drawable.main_off);
}



public void activate(View v){
    LinearLayout layout = (LinearLayout) findViewById (R.id.main_layout);
    Resources res = getResources();

    Drawable on = res.getDrawable(R.drawable.main_on);
    Drawable off = res.getDrawable(R.drawable.main_off);

    if (layout.getBackground().getConstantState() == off.getConstantState()){
        layout.setBackgroundResource(R.drawable.main_on);
        Toast.makeText(getApplicationContext(), "App has been activated", Toast.LENGTH_SHORT).show();
        turnon();
    }
    else if (layout.getBackground().getConstantState() == on.getConstantState()){
        layout.setBackgroundResource(R.drawable.main_off);
        Toast.makeText(getApplicationContext(), "App has been deactivated", Toast.LENGTH_SHORT).show();
        turnoff();
    }
}

}
4

1 に答える 1

1

2.2 と 2.3 の両方のエミュレータでこれを問題なく実行できます。

私が提案できる唯一のことは、drawablesを削除しようとすることです(おそらくいくつかの設定が台無しになっている可能性があります)、またはweight_sumを使用しているため、相対的なレイアウトの高さを0dpにしようとすることです

于 2012-10-14T20:29:41.240 に答える