2013-08-21 113 views
0

我正在尝试创建自定义标题,但我不知道如何操作。我一直在研究,但我总是有风格和东西,我的日食不会有问题。 事情是,我想要的东西很简单。Android的自定义操作栏/标题

中的Android 4.2.2的屏幕会是这样的:

http://imageshack.us/a/img838/8840/89ur.png

我想,这就是Android SDK 11等的默认标题。我一直在测试它更改清单android:targetSdkVersion和我的手机应用程序的外观变化。

问题是不同Android版本之间的兼容性。我见过的应用程序在不同的设备上工作,这是结果:

在安卓4.0.4

http://imageshack.us/a/img600/6246/rdhl.png

在安卓2.3.6

http://imageshack.us/a/img836/1599/ezit.png

你可以注意标题,甚至颜色和形状如何变化。 如果我创建自定义标题,它会在每个设备中以相同的方式看到,还是取决于Android版本?

我想为每个设备制作应用程序的唯一版本,这可能吗? 如果可能的话,我想要第一张图片的下一个标题,并且在红色的矩形内部,我想插入一张图片。如果我可以保留选项菜单(黄色方块),那么更好。如果由于Android版本而无法使用,使用硬件按钮无法激活。 在此先感谢!

+0

在这种情况下,我会去为一个XML文件中的线性布局实现了自定义操作栏,并与标签,包括它。 –

+0

@DídacPérez,我该怎么做? – n4h1n

回答

1

这是不实际的,可能不推荐,但我做的是我用完全隐藏的动作条/头的Android清单:

<activity 
     android:name=".My_Activity_Name" 
     android:theme="@android:style/Theme.NoTitleBar" /> 

然后,我的活动布局的xml文件中,我简单地定制构建一个看起来像操作栏/标题的标题。这里是我的应用程序的一个例子:

enter image description here

即在XML文件中完全做到,但它看起来真实的,因为正确的动作条/头。

编辑

这是我的导航栏XML布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="45dp" 
    android:background="@drawable/navbar_topxml" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="55dp" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" 
     android:gravity="center" > 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/nav_back" 
      android:onClick="nav_back" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.99" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/tab_style" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical" 
      android:paddingLeft="5dp" 
      android:text="TITLE" 
      android:textColor="#888888" 
      android:textStyle="bold" 
      android:textSize="20sp" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" 
     android:gravity="center" 
     android:paddingLeft="20dp" 
     android:paddingRight="10dp" > 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" 
      android:gravity="center" > 
      <ImageView 
       android:id="@+id/todo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/todo_off" 
       android:onClick="todo_toggle" /> 
     </LinearLayout> 
     <LinearLayout 
      android:layout_width="10dp" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" > 
     </LinearLayout> 
     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" 
      android:gravity="center" > 
      <ImageView 
       android:id="@+id/favourite" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/fav_off" 
       android:onClick="fav_toggle" /> 
     </LinearLayout> 
     <LinearLayout 
      android:layout_width="10dp" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal" 
      android:gravity="center" > 
      <ImageView 
       android:id="@+id/done" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/done_off" 
       android:onClick="done_toggle" /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 
</LinearLayout> 
+0

这是一个好主意,你能给我一个代码的例子吗? – n4h1n

+0

太棒了!这非常有用! – n4h1n

+0

不客气。 – 2013-08-21 09:13:52

0

我会做的只是设置一个主题,在您的清单中没有标题栏,并在您的XML文件,该文件是你的标题栏自定义布局文件。这确保它在每个版本中都是一样的。它的好处是你可以做到一切。

+0

我该怎么做?我见过类似的东西,我试过了,但标题栏不会出现。如果我用tittle bar设置了这个布局,选项菜单将消失,我不能将它包含在Android版本中选项按钮在栏中。你知道任何一个页面,我可以找到你正在谈论的这个教程吗? – n4h1n

+0

请参阅下面的答案...它显示了如何隐藏清单中的TitleBar。然后在活动的Layout xml文件中,构建自定义标题栏。 – 2013-08-21 08:17:50

1

这是评论的n4h1n的答复”的问题。

layout_action_bar。XML:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="46dp" 
    android:orientation="horizontal" > 

    <FrameLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="5" > 

     <ImageView 
      android:id="@+id/imageSearch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:src="@drawable/search" /> 

    </FrameLayout> 

    <FrameLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="6" > 

     <TextView 
      android:id="@+id/textTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:textSize="24sp" 
      android:textColor="#FF9C00" 
      android:text="@string/turipolis" /> 

    </FrameLayout> 

    <FrameLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="5" > 

     <ImageView 
      android:id="@+id/imageUser" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:src="@drawable/user" /> 

    </FrameLayout> 

</LinearLayout> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="8dp" 
    android:background="@drawable/action_bar_shadow" /> 

而在你的活动XML:

<include 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    layout="@layout/layout_action_bar" /> 
+0

我在哪部分活动中应该包含?我得到的标题图像,但没有在正确的位置 – n4h1n

+0

在我的情况下,我的整个活动是垂直水平布局,所以我把包含作为布局的第一个元素。 –

1

我会认真建议ActionBarSherlock,http://actionbarsherlock.com/。它确实是一个很棒的图书馆。你可以找到一些它的代码演示在这里http://actionbarsherlock.com/download.html,这里https://github.com/JakeWharton/ActionBarSherlock/tree/master/actionbarsherlock-samples

他们的源代码,但是我记得谷歌宣布,他们已经回迁的动作条,以2.1的支持库这里http://developer.android.com/tools/support-library/index.html。在您打算使用它而不是扩展正常Activity类的活动中,您将扩展ActionBarActivity类。同样的逻辑也有些适用于ActionBarSherlock,因为你会被延长SherlockActivity

+0

没错,许多开发人员都使用该ActionBarSherlock,但正如Adam所说:“添加了ActionBar以允许将操作栏用户界面设计模式实施回Android 2.1(API级别7)及更高版本。使用这个类需要你通过扩展新的ActionBarActivity类来实现你的活动。' –