/*这个demo演示了如何使用View类提供的setSystemUiVisibility和getSystemUiVisibility方法
* 动态显示和隐藏状态栏*/
public class MainActivity extends Activity implements OnQueryTextListener {
private Content mContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(R.layout.activity_main);
mContent = (Content) findViewById(R.id.content);
mContent.init((TextView) findViewById(R.id.texttitle),
(SeekBar) findViewById(R.id.seekbar));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.content_action, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
searchView.setOnQueryTextListener(this);
MenuItem actionProvider = menu.findItem(R.id.shared_provider);
ShareActionProvider shareProvider = (ShareActionProvider) actionProvider
.getActionProvider();
shareProvider
.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
Uri uri = Uri.fromFile(getFileStreamPath("shared.png"));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareProvider.setShareIntent(shareIntent);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.stable_layout) {
item.setChecked(!item.isChecked());
int baseSysUiVis = item.isChecked() ? View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
: View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
mContent.setBaseVisibility(baseSysUiVis);
return true;
}
return false;
}
public void onSort(MenuItem item) {
}
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(this, "Searching for: " + query + "...",
Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return true;
}
// 自定义一个视图
public static class Content extends ScrollView implements
View.OnClickListener, View.OnSystemUiVisibilityChangeListener {
private TextView mTextView;
private TextView mTitleView;
private SeekBar mSeekBar;
// 导航Tab是否可见
private boolean mNavVisible;
// 设置状态栏的初始状态为图层全屏(状态栏被隐藏)和稳定状态(隐藏状态栏,如果ACTION_BAR_OVERLAY is requested,
// 还会隐藏actionbar)
private int mBaseSystemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| SYSTEM_UI_FLAG_LAYOUT_STABLE;
private int mLastSystemUiVis;
Runnable mNaveHide = new Runnable() {
@Override
public void run() {
setNavvisibility(false);
}
};
public Content(Context context, AttributeSet attrs) {
super(context, attrs);
mTextView = new TextView(context);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
mTextView.setText(context.getString(R.string.text));
mTextView.setOnClickListener(this);
mTextView.setTextIsSelectable(true);
addView(mTextView, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
setOnSystemUiVisibilityChangeListener(this);
}
public void init(TextView title, SeekBar seekBar) {
mTitleView = title;
mSeekBar = seekBar;
// 初始状态时设置导航界面可见
setNavvisibility(true);
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility);
// 当视图可见时让导航视图显示5秒后退出
setNavvisibility(true);
getHandler().postDelayed(mNaveHide, 5000);
}
// 滚动时不显示导航栏
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
setNavvisibility(false);
}
protected void setNavvisibility(boolean visibility) {
// 初始化状态栏的状态
int newVis = mBaseSystemUiVisibility;
if (!visibility) {
// 如果visibility为假,则加入全屏和低能标志位
newVis |= SYSTEM_UI_FLAG_FULLSCREEN
| SYSTEM_UI_FLAG_LOW_PROFILE;
}
boolean changed = newVis == getSystemUiVisibility();
// System.out.println("sys:"+getSystemUiVisibility());
// 如果状态栏的显示状态为初始状态或者导航栏设置为可见状态
// 则移除mNaveHide
if (changed || visibility) {
Handler h = getHandler();
if (h != null) {
h.removeCallbacks(mNaveHide);
}
}
setSystemUiVisibility(newVis);
mTitleView.setVisibility(visibility ? VISIBLE : INVISIBLE);
mSeekBar.setVisibility(visibility ? VISIBLE : INVISIBLE);
}
@Override
public void onClick(View v) {
int curVis = getSystemUiVisibility();
boolean visible=(curVis & SYSTEM_UI_FLAG_LOW_PROFILE) != 0;
setNavvisibility(visible);
}
public void setBaseVisibility(int visibility) {
mBaseSystemUiVisibility = visibility;
}
@Override
public void onSystemUiVisibilityChange(int visibility) {
// 监测当状态栏的显示状态不再是低能模式时,我们也退出全屏模式
// 异或为半加运算,获取到状态栏变化前后的状态
int diff = mLastSystemUiVis ^ visibility;
mLastSystemUiVis = visibility;
if ((diff & SYSTEM_UI_FLAG_LOW_PROFILE) != 0
&& (visibility & SYSTEM_UI_FLAG_LOW_PROFILE) == 0) {
setNavvisibility(true);
}
}
}
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root" >
<view class="com.fishtosky.contentbrowser.MainActivity$Content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:animateLayoutChanges="true">
<TextView
android:id="@+id/texttitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#c0ffffff"
android:textColor="#ff000000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center"
android:padding="16dp"
android:text="A title goes here"
android:layout_gravity="top|center_horizontal"/>
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:padding="16dp"/>
</FrameLayout>
</FrameLayout>
content_action.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="Search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView"/>
<item android:id="@+id/shared_provider"
android:title="Shared title"
android:showAsAction="always"
android:actionProviderClass="android.widget.ShareActionProvider"/>
<group
android:id="@+id/stable_layout_group"
android:checkableBehavior="all">
<item
android:id="@+id/stable_layout"
android:title="Stable Layout"
android:checked="true"
android:showAsAction="never"></item>
</group>
<item android:id="@+id/shared"
android:icon="@android:drawable/ic_menu_share"
android:title="Shared"
android:showAsAction="ifRoom"/>
<item android:id="@+id/sort"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="Sort"
android:showAsAction="ifRoom">
<menu >
<item
android:id="@+id/sort_size"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="Sort By Size"
android:onClick="onSort"/>
<item
android:id="@+id/sort_alpha"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:title="Sort Alpha"
android:onClick="onSort"/>
</menu>
</item>
</menu>