Jac*_*ień 5 android android-activity android-styles
我正在创建一个看起来像对话框的活动.
这是风格:
<style name="TablesDialogActivity" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowBackground">@drawable/frame_background_left</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是onCreate()的活动:
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
super.onCreate(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
并且还在活动触摸拦截器内:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
finish();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
它几乎可以工作,活动在对话界限之外触摸完成,但它也与背景活动上的按钮交互,这是不好的.有关该文档的onTouchEvent说明如果您使用了触摸事件,则应返回true.我回归真实,但似乎并非如此.
请注意,您还需要问题中的完整代码。
除了我在后台活动(或只是应用程序的基本活动)内的解决方案之外,我还添加了:
private FrameLayout touchInterceptor;
@Override
protected void onPause() {
if (touchInterceptor.getParent() == null) {
((ViewGroup) findViewById(android.R.id.content)).addView(touchInterceptor);
}
super.onPause();
}
@Override
protected void onResume() {
((ViewGroup) findViewById(android.R.id.content)).removeView(touchInterceptor);
super.onResume();
}
Run Code Online (Sandbox Code Playgroud)
并在onCreate():
// For intercepting clicks from dialog like activities
touchInterceptor = new FrameLayout(this);
touchInterceptor.setClickable(true);
Run Code Online (Sandbox Code Playgroud)
现在就像魅力一样!:)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |