She*_*lam 134 android android-layout android-activity
我正在尝试实现自定义标题栏:
这是我的助手课程:
import android.app.Activity;
import android.view.Window;
public class UIHelper {
public static void setupTitleBar(Activity c) {
final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
c.setContentView(R.layout.main);
if (customTitleSupported) {
c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在onCreate()中调用它的地方:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupUI();
}
private void setupUI(){
setContentView(R.layout.main);
UIHelper.setupTitleBar(this);
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
requestFeature() must be called before adding content
Run Code Online (Sandbox Code Playgroud)
Oct*_*ean 324
好吧,只需执行错误消息告诉您的操作.
setContentView()以前不要打电话requestFeature().
注意:
正如评论说,对于ActionBarSherlock和AppCompat图书馆,有必要调用requestFeature()之前super.onCreate()
Coo*_*ter 23
我知道它已经超过一年了,但是呼唤requestFeature()从未解决我的问题.事实上我根本不打电话.
我认为这是一个夸大观点的问题.尽管我都在寻找,但在我玩弄不同的视图膨胀方法之前,我从未找到合适的解决方案.
AlertDialog.Builder是一个简单的解决方案,但如果您使用onPrepareDialog()更新该视图,则需要大量工作.
另一种方法是利用AsyncTask进行对话.
我使用的最终解决方案如下:
public class CustomDialog extends AlertDialog {
private View content;
public CustomDialog(Context context) {
super(context);
LayoutInflater li = LayoutInflater.from(context);
content = li.inflate(R.layout.custom_view, null);
setUpAdditionalStuff(); // do more view cleanup
setView(content);
}
private void setUpAdditionalStuff() {
// ...
}
// Call ((CustomDialog) dialog).prepare() in the onPrepareDialog() method
public void prepare() {
setTitle(R.string.custom_title);
setIcon( getIcon() );
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
*一些附加说明:
Ill*_*ent 14
我正在扩展DialogFragment,上面的答案没有用.我不得不使用getDialog()来实现删除标题:
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
Run Code Online (Sandbox Code Playgroud)
小智 6
对于 SDK 版本 23 及更高版本,如果您使用 AppCompatActivity 来扩展 Activity,则会引发相同的 RuntimeException。如果您的 Activity 直接派生自 Activity,则不会发生这种情况。
这是 Google 上的一个已知问题,如https://code.google.com/p/android/issues/detail?id=186440中所述
为此提供的解决方法是使用 supportRequestWindowFeature() 方法而不是使用 requestFeature()。
如果解决了您的问题,请点赞。
| 归档时间: |
|
| 查看次数: |
113085 次 |
| 最近记录: |