2011-11-25 34 views
4

是否有人使用MonoDroid成功設置了自定義標題?如何使用Xamarin/Monodroid設置自定義標題

此代碼失敗:

base.OnCreate (bundle);  
SetContentView (Resource.Layout.WordSearchLayout); 

//Customise the title bar 
if (this.Window.RequestFeature(WindowFeatures.CustomTitle)) 
{    
    this.Window.SetFeatureInt (WindowFeatures.CustomTitle, Resource.Layout.custom_title); 
} 

奇怪的是,在調用RequestFeature與異常requestFeature() must be called!失敗。

I/MonoDroid(26052): UNHANDLED EXCEPTION: Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown. 
I/MonoDroid(26052): at Android.Runtime.JNIEnv.CallBooleanMethod (intptr,intptr,Android.Runtime.JValue[]) <0x0007c> 
I/MonoDroid(26052): at Android.Views.Window.RequestFeature (Android.Views.WindowFeatures) <0x00157> 
I/MonoDroid(26052): at com.xxx.android.WordSearchActivity.OnCreate (Android.OS.Bundle) <0x0013b> 
I/MonoDroid(26052): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005f> 
I/MonoDroid(26052): at (wrapper dynamic-method) object.1a40b50f-d523-4f52-b291-bcedd3a88965 (intptr,intptr,intptr) <0x00033> 
I/MonoDroid(26052): 
I/MonoDroid(26052): --- End of managed exception stack trace --- 
I/MonoDroid(26052): android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
I/MonoDroid(26052):  at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
I/MonoDroid(26052):  at com.xxx.android.WordSearchActivity.n_onCreate(Native Method) 
I/MonoDroid(26052):  at com.xxx.android.WordSearchActivity.onCreate(WordSearchActivity.java:30) 
I/MonoDroid(26052):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065) 
I/MonoDroid(26052):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745) 
I/MonoDroid(26052):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797) 
I/MonoDroid(26052):  at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
I/MonoDroid(26052):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132) 
I/MonoDroid(26052):  at android.os.Handler.dispatchMessage(Handler.java:99) 
I/MonoDroid(26052):  at android.os.Looper.loop(Looper.java:143) 
I/MonoDroid(26052):  at android.app.ActivityThread.main(ActivityThread.java:4914) 
I/MonoDroid(26052):  at java.lang.reflect.Method.invokeNative(Native Method) 
I/MonoDroid(26052):  at java.lang.reflect.Method.invoke(Method.java:521) 
I/MonoDroid(26052):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
I/MonoDroid(26052):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
I/MonoDroid(26052):  at dalvik.system.NativeStart.main(Native Method) 
E/mono (26052): 
E/mono (26052): Unhandled Exception: Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown. 
E/mono (26052): at Android.Runtime.JNIEnv.CallBooleanMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] in <filename unknown>:0 
E/mono (26052): at Android.Views.Window.RequestFeature (WindowFeatures featureId) [0x00000] in <filename unknown>:0 
E/mono (26052): at com.xxx.android.WordSearchActivity.OnCreate (Android.OS.Bundle bundle) [0x00000] in <filename unknown>:0 
E/mono (26052): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (IntPtr jnienv, IntPtr native__this, IntPtr native_savedInstanceState) [0x00000] in <filename unknown>:0 
E/mono (26052): at (wrapper dynamic-method) object:1a40b50f-d523-4f52-b291-bcedd3a88965 (intptr,intptr,intptr) 
E/mono (26052): --- End of managed exception stack trace --- 
E/mono (26052): android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
E/mono (26052): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
E/mono (26052): at com.xxx.andro 

更改代碼的順序調用SetContentView(見下文),有一定的效果:

base.OnCreate (bundle);   

//Customise the title bar 
if (this.Window.RequestFeature (WindowFeatures.CustomTitle)) 
{    
    this.Window.SetFeatureInt (WindowFeatures.CustomTitle, Resource.Layout.custom_title); 
} 
SetContentView (Resource.Layout.WordSearchLayout); 

這將導致其標題爲空灰色條,但沒有別的。 custom_title被定義爲:

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTitle" 
    android:text="This is my new title" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:textColor="@android:color/black" 
    android:background="@android:color/white" 
    android:layout_marginLeft="25px" 
    android:paddingTop="3px" 
/> 

模擬器和設備上的結果相同(灰色條)。

任何想法?

回答

5

在我的應用程序中,我使用此代碼來設置自定義標題。

base.OnCreate (bundle);   
RequestWindowFeature(WindowFeatures.CustomTitle); 
SetContentView (Resource.Layout.WordSearchLayout); 
Window.SetFeatureInt (WindowFeatures.CustomTitle, Resource.Layout.custom_title); 
+0

完美。謝謝。 –

+0

對RequestWindowFeature(WindowFeatures.CustomTitle)爲+1;在SetContentView之前! – PCoder

+0

@mironych如何設置FEATURE_NO_TITLE –

相關問題