StatusBaseActivity.java
2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.sunvote.statusbar.base;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import com.sunvote.statusbar.AbsStatusBar;
import com.sunvote.statusbar.view.RootFrameLayout;
import me.kaini.statusbar.R;
/**
* 解决状态栏遮挡
* 1. 对输入法遮挡的处理
* 2. 对Activity内容遮挡的处理
* @author
*/
public abstract class StatusBaseActivity extends FragmentActivity {
private Intent mStatusBarStateIntent = new Intent(AbsStatusBar.ACTION_STATUS_BAR_STATE);
/**
* 解决遮挡Activity内容的控件
*/
private RootFrameLayout mRootContainer;
private View mContentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRootContainer = new RootFrameLayout(this);
super.setContentView(mRootContainer);
mRootContainer.setOnKeyboardStateListener(new RootFrameLayout.OnKeyboardStateListenter() {
@Override
public void onState(boolean visible) {
int visibility = visible ? View.GONE : View.VISIBLE;
mStatusBarStateIntent.putExtra(AbsStatusBar.EXTRA_STATE, visibility);
sendBroadcast(mStatusBarStateIntent);
//fixedStatusBarBlock(visible);
}
});
}
@Override
public void setContentView(View view) {
setContentView(view,null);
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
mContentView = view;
mRootContainer.addView(view);
if(params != null){
mRootContainer.setLayoutParams(params);
}
//fixedStatusBarBlock(false);
}
private void fixedStatusBarBlock(boolean statusBarVisible){
changeBottomPadding(statusBarVisible);
}
/**
* 调整BottomPadding解决状态栏遮挡的问题
* @param statusBarVisible
*/
private void changeBottomPadding(boolean statusBarVisible){
int statusBarHeight = statusBarVisible ? 0 : getStatusBarHeight();
mRootContainer.setPadding(mRootContainer.getPaddingLeft(), mRootContainer.getPaddingLeft(), mRootContainer.getPaddingRight(), mContentView.getPaddingBottom() + statusBarHeight);
}
/**
* 可重写返回真实的自定义状态栏高度
* @return
*/
protected int getStatusBarHeight(){
return (int)getResources().getDimension(R.dimen.status_bar_height);
}
@Override
public void setContentView(int layoutResID) {
View v = getLayoutInflater().inflate(layoutResID, null);
setContentView(v);
}
}