2013-03-10 127 views
-2

我的應用程序有2個活動:按鈕背景是否自動更改?

  • MainActivity有一個按鈕,啓動子活動,該按鈕未設置透明。

  • SubActivity有一個由setAlpha()透明的按鈕。

我的問題是有時,當我通過按下後退按鈕返回到MainActivity從子活動,MainActivity的按鈕變爲透明相同子活動的按鈕。如果我退出應用程序並再次打開,則會頻繁發生此問題。

我也嘗試在每個活動的onResume()中設置按鈕1和按鈕2的alpha 255,但它不起作用。有時button1變得透明,有時button2不透明。

我上傳MainActivity.java:

package com.example.buttondemo; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 


public class MainActivity extends Activity implements OnClickListener { 
    private Button button1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.button1: 
      startActivity(new Intent(this, SubActivity.class)); 
      break; 

     default: 
      break; 
     } 
    } 
} 

SubActivity.java:

package com.example.buttondemo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.Button; 

public class SubActivity extends Activity { 

    private Button button2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sub); 

     button2 = (Button) findViewById(R.id.button2); 
     button2.getBackground().setAlpha(120); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.sub, menu); 
     return true; 
    } 
} 

\水庫\值\ strings.xml中:

<string name="app_name">ButtonDemo</string> 
<string name="action_settings">Settings</string> 
<string name="hello_world">Hello world!</string> 
<string name="title_activity_sub">SubActivity</string> 
<string name="button1_label">button1</string> 
<string name="button2_label">button2</string> 

\ res \ layout \ activity_main.xml;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/button1_label" 
     android:background="@drawable/button_selector" /> 

</RelativeLayout> 

\水庫\佈局\ activity_sub.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".SubActivity" > 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/button2_label" 
     android:background="@drawable/button_selector" /> 

</RelativeLayout> 

\水庫\繪製\ button_selector.xml:

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/pressed_button" /> <!-- pressed --> 
    <item 
     android:state_focused="true" 
     android:drawable="@drawable/pressed_button" /> <!-- focused --> 
    <item 
     android:drawable="@drawable/default_button" /> <!-- default --> 
</selector> 

回答

0

我可以覆蓋這個問題,這是因爲2個按鈕請參閱相同的可繪製資源(pressed pressed Button.png和default_button.png)。當我在源代碼中爲button2設置透明時,看起來它也會影響其可繪製資源。然後,button1也引用這個資源,它會導致不穩定的背景。

我嘗試刪除爲按鈕設置背景的源代碼,並且此問題從未發生。所以我認爲這個問題的條件是: - 在源代碼(.java)中動態設置按鈕的相同可繪製文件中的背景,爲其中一個設置透明。

因此,我爲原來的button2(pressed pressed,Button_button.png,default_button.png)製作一個名爲pressed pressed的button_button1.png和default_button1.png的可繪製資源副本。這意味着現在button1指的是原始drawable,button2指的是新的drawable。結果非常奇怪,它可以很好地工作。

我也在Android 4.2上測試,除了我爲可繪製資源製作副本的方式之外,我可以通過android:alpha在.xml中設置透明度,它也可以很好地工作。

希望這會有所幫助! :)