一 目的
會出現想要自定義dialog并去除默認自帶的title部分的情況,有時候就會發現無論是定義theme:
<style name="MDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert">
<item name="android:windowNoTitle">true</item>
</style>
還是添加代碼:
requestWindowFeature(Window.FEATURE_NO_TITLE)
super.setTitle(null)
均無效。
二 解決辦法
最后添加了如下代碼才可以:
supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
三 分析
它是什么來頭?
/**
* Enable extended support library window features.
* <p>
* This is a convenience for calling
* {@link android.view.Window#requestFeature getWindow().requestFeature()}.
* </p>
*
* @param featureId The desired feature as defined in {@link android.view.Window} or
* {@link androidx.core.view.WindowCompat}.
* @return Returns true if the requested feature is supported and now enabled.
*
* @see android.app.Dialog#requestWindowFeature
* @see android.view.Window#requestFeature
*/
public boolean supportRequestWindowFeature(int featureId) {
return getDelegate().requestWindowFeature(featureId);
}
實際上,當去打印對應的值就會發現都返回了true,表示支持該特性且處于能被使用的狀態。
requestWindowFeature(Window.FEATURE_NO_TITLE) ->true
window!!.requestFeature(Window.FEATURE_NO_TITLE) ->true
supportRequestWindowFeature(Window.FEATURE_NO_TITLE) ->true
但是,最終還是只有 supportRequestWindowFeature能起到效果,也即在AppCompat特性下,需要使用的是該support方法。