Ben*_*ann 0 transparency android android-layout
我对Android很新.我想在用户接到电话时弹出透明屏幕.我有这个代码打开MyActivity屏幕,但它是白色而不是透明.
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
SystemClock.sleep(1);
Intent intent = new Intent(context, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
context.startActivity(intent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是MyActivity的代码:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
}
}
Run Code Online (Sandbox Code Playgroud)
这是布局:
<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:windowBackground="@android:color/transparent"
android:windowIsTranslucent="true"
android:windowAnimationStyle="@android:style/Animation.Translucent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/incoming_call"
tools:context=".MyActivity" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这会成功弹出一个屏幕,上面显示我的消息,但它使用白色背景而不是透明背景.知道我可能做错了什么吗?我正在使用Android 2.2 SDK的模拟器.
我认为问题可能在于窗口和contentView之间的混淆.
android:windowBackground="@android:color/transparent"
android:windowIsTranslucent="true"
android:windowAnimationStyle="@android:style/Animation.Translucent"
android:windowNoTitle="true"
android:windowFrame="@null"
Run Code Online (Sandbox Code Playgroud)
一般而言,RelativeLayout以及您在内容视图中放置的任何内容都可能不会遵守这些属性.
窗口属性是Window的属性.您可以使用主题在代码或活动设置中更改窗口.
<activity android:name="....YourActivity" android:theme="@style/MyTransparentTheme"/>
Run Code Online (Sandbox Code Playgroud)
然后在一些res文件中:
项目/ RES /价值/的themes.xml
<resources ....>
....
<style android:name="MyTransparentTheme" parent="@android:style/Theme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@null</item>
</style>
....
Run Code Online (Sandbox Code Playgroud)
您也可以通过直接在活动的窗口上设置这些属性来设置它,类似于您设置的方式getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);您也可以将窗口设置为具有透明背景.
| 归档时间: |
|
| 查看次数: |
4664 次 |
| 最近记录: |