Blame view

C5/statusBar/src/main/java/com/sunvote/statusbar/base/StatusBaseActivity.java 2.72 KB
fac86401   孙向锦   初始化C5 Vote
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);
      }
  
  }