一 目的
会出现想要自定义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方法。