我最近开始在android开发,我仍然试图了解一些概念。
我正在努力设计一个电话式键盘,我得到的主要是按照我想要的方式工作,例如。
我的下一步是将我们在此处看到的所有内容放入标签中,以便我可以在多个活动之间切换。
我为TabHost
使用了以下XML:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="70.0dp"
android:layout_weight="0" />
</LinearLayout>
</TabHost>
以及以下TabActivity
来管理标签逻辑:
[Activity(MainLauncher = true, Label = "@string/app_name", Theme = "@android:style/Theme.NoTitleBar")]
public class TabContainer : TabActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.TabContainerLayout);
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent(this, typeof(KeypadActivity));
intent.AddFlags(ActivityFlags.NewTask);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = TabHost.NewTabSpec("keypad");
spec.SetIndicator("Keypad", Resources.GetDrawable(Resource.Drawable.keypad_light));
spec.SetContent(intent);
TabHost.AddTab(spec);
// Do the same for the other tabs
intent = new Intent(this, typeof(LogsActivity));
intent.AddFlags(ActivityFlags.NewTask);
spec = TabHost.NewTabSpec("logs");
spec.SetIndicator("Logs", Resources.GetDrawable(Resource.Drawable.logs_light));
spec.SetContent(intent);
TabHost.AddTab(spec);
intent = new Intent(this, typeof(UnsetActivity));
intent.AddFlags(ActivityFlags.NewTask);
spec = TabHost.NewTabSpec("unset");
spec.SetIndicator("Unset", Resources.GetDrawable(Resource.Drawable.unset_light));
spec.SetContent(intent);
TabHost.AddTab(spec);
TabHost.CurrentTab = 0;
}
}
虽然标签行为正确,但我已经失去了以前键盘的功能和风格,现在看来如下:
为什么当我使用现有的KeypadActivity
并将其插入TabHost
时,我会失去功能和风格?如何在TabHost
?
答案 0 :(得分:0)
事实证明,服务无效的问题是
public void OnServiceConnected(ComponentName name, IBinder service){}
永远不会被召唤。尝试在TabActivity
要解决此问题,OnStart()
方法需要在应用程序上下文中显式调用BindService()
方法,例如
protected override void OnStart ()
{
base.OnStart ();
var intentFilter = new IntentFilter (ServiceClass.UpdatedAction){Priority = (int)IntentFilterPriority.HighPriority};
RegisterReceiver (_receiver, intentFilter);
_serviceConnection = new ServiceConnection (this);
Application.Context.BindService(_intent, _serviceConnection, Bind.AutoCreate);
// instead of
// BindService(_intent, _serviceConnection, Bind.AutoCreate);
StartService(_intent);
}
RE样式,我必须为按钮指定一个特定的样式,并将其应用于每个样式。