0

我最近开始在 android 中进行开发,但我仍在尝试了解一些概念。

我一直在努力设计一个电话式键盘,我得到它的大部分工作和寻找我想要的方式,例如

在此处输入图像描述

我的下一步是将我们在这里看到的所有内容放入选项卡中,以便我可以在多个活动之间切换。

我将以下 XML 用于TabHost

<?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

4

1 回答 1

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 样式,我必须为按钮指定特定样式,并将其应用于每个样式。

于 2013-06-07T09:33:02.980 回答