在APP裏設置了沉浸式狀態欄之後出現了一個問題,Toast裏的文字位置出現了偏移,這時候就須要自定義Toast的樣式來將文字設置居中。android
public class ToastUtil { private static Toast mToast = null; public static void show(Context context, String message) { show(context, message, Toast.LENGTH_SHORT); } private static Handler mHandler = new Handler(); private static Runnable runnable = new Runnable() { @Override public void run() { if (mToast != null) { mToast.cancel(); } } }; public static void show(Context context, String message, int duration) { mHandler.removeCallbacks(runnable); LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.toast_lay, null); TextView str = (TextView) view.findViewById(R.id.toast_content); str.setAlpha(0.9f); str.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.shape_toast_bg)); str.setText(message); mToast = new Toast(context); mToast.setView(view); mToast.show(); mHandler.postDelayed(runnable, 1500); } }
XML佈局R.layout.toast_layide
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" > <TextView android:id="@+id/toast_content" android:text="aaa" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
Syte樣式R.drawable.shape_toast_bg佈局
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!--顏色--> <solid android:color="@color/chat_select_self"/> <!--內邊距--> <!--<padding--> <!--android:bottom="20dp"--> <!--android:left="20dp"--> <!--android:right="20dp"--> <!--android:top="20dp"/>--> <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp"/> <!--設置圓角--> <corners android:radius="10dip"/> <!--stroke設置描邊--> <!--<stroke--> <!--android:width="2dp"--> <!--android:color="@android:color/darker_gray"/>--> </shape>
可是這設置不了內邊距我很苦惱,設置padding沒效果post
今天更新下解決方法ui
出現toast背景與提示文字錯位的現象,應該是在style裏面theme中加入了.net
<item name="android:fitsSystemWindows">true</item>
其實這句不須要也能夠實現沉浸式的效果,刪去以後toast就正常顯示了;code
可是 刪除的話又會 出現標題欄欄置頂和導航欄重疊了xml
能夠在根佈局內設置blog
android:fitsSystemWindows="true"
可是若是咱們activity比較多,每個頁面都添加android:fitsSystemWindows="true"
比較麻煩,咱們須要改動一下:繼承
在Base類中設置
ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT); View parentView = contentFrameLayout.getChildAt(0); if (parentView != null && Build.VERSION.SDK_INT >= 14) { parentView.setFitsSystemWindows(true); }
而後全部的 須要類 繼承他就能夠了;
而後須要沉浸狀態欄的activity的佈局文件中就能夠把android:fitsSystemWindows="true"
這行代碼給省略了!