Android Activityカスタマイズに必要なTitle
ActivityインタフェースのデフォルトのTitleは文字のみで記述されており、微信のTilte行のようにナビゲーションと多機能効果を持つようにするには、必要なレイアウトを自分で定義してロードする必要があります.
前回はActivityのフルスクリーン表示とTitleの削除についてお話ししましたが、Windowウィンドウfeaturesを変更することになりました
上のソースコードを見ると、自分のTitleをカスタマイズするにはWindowを採用する必要があります.FEATURE_CUSTOM_TITLEという特徴を実現する.
注意しなければならないのはFEATURE_CUSTOM_TITLEというフィーチャーは他のフィーチャーと一緒に使用できません.また、setContentView()メソッドの前に使用しなければなりません(これはすべてのWindowフィーチャーが変更される必須条件です).そうしないと無効です.
まずレイアウトファイル
私はただ2枚のピクチャーだけを参加して、みんなは自分の必要に応じて要素を追加することができます
次はコードをつけます
これにより、android sdk 3.0以上で実行すると表示されるカスタムTitleの効果が得られます.
次のエラーが発生しました:android.util.AndroidRuntimeException: You cannot combine custom titles with other title features
なぜなら、3.0以上のシステムではWindowがデフォルトで使用するからである.FEATURE_ACTION_BAR、私たちは自分のスタイルを使ってそれを修正する必要があります.
まず、異なるバージョンを考慮して、vlaues-v 11とvalues-v 14の2つのフォルダが3.0以上4.0以上を満たしていることを確認します.
スタイルを見てxml
背景色を変更android:windowTitleBackgroundStyleの値を変更し、タイトルバーの高さを変更するとandroid:windowTitleSizeの値を変更します
WindowActionBarフィーチャーを削除
次にAndroidManifestを修正します.xmlファイル、タイトルバーをカスタマイズするActivityを見つけ、android:theme値を追加します.
前回はActivityのフルスクリーン表示とTitleの削除についてお話ししましたが、Windowウィンドウfeaturesを変更することになりました
/** Flag for the "options panel" feature. This is enabled by default. */
public static final int FEATURE_OPTIONS_PANEL = 0;
/** Flag for the "no title" feature, turning off the title at the top
* of the screen. */
public static final int FEATURE_NO_TITLE = 1;
/** Flag for the progress indicator feature */
public static final int FEATURE_PROGRESS = 2;
/** Flag for having an icon on the left side of the title bar */
public static final int FEATURE_LEFT_ICON = 3;
/** Flag for having an icon on the right side of the title bar */
public static final int FEATURE_RIGHT_ICON = 4;
/** Flag for indeterminate progress */
public static final int FEATURE_INDETERMINATE_PROGRESS = 5;
/** Flag for the context menu. This is enabled by default. */
public static final int FEATURE_CONTEXT_MENU = 6;
/** Flag for custom title. You cannot combine this feature with other title features. */
public static final int FEATURE_CUSTOM_TITLE = 7;
/**
* Flag for enabling the Action Bar.
* This is enabled by default for some devices. The Action Bar
* replaces the title bar and provides an alternate location
* for an on-screen menu button on some devices.
*/
public static final int FEATURE_ACTION_BAR = 8;
/**
* Flag for requesting an Action Bar that overlays window content.
* Normally an Action Bar will sit in the space above window content, but if this
* feature is requested along with {@link #FEATURE_ACTION_BAR} it will be layered over
* the window content itself. This is useful if you would like your app to have more control
* over how the Action Bar is displayed, such as letting application content scroll beneath
* an Action Bar with a transparent background or otherwise displaying a transparent/translucent
* Action Bar over application content.
*
* <p>This mode is especially useful with {@link View#SYSTEM_UI_FLAG_FULLSCREEN
* View.SYSTEM_UI_FLAG_FULLSCREEN}, which allows you to seamlessly hide the
* action bar in conjunction with other screen decorations.
*
* <p>As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}, when an
* ActionBar is in this mode it will adjust the insets provided to
* {@link View#fitSystemWindows(android.graphics.Rect) View.fitSystemWindows(Rect)}
* to include the content covered by the action bar, so you can do layout within
* that space.
*/
public static final int FEATURE_ACTION_BAR_OVERLAY = 9;
/**
* Flag for specifying the behavior of action modes when an Action Bar is not present.
* If overlay is enabled, the action mode UI will be allowed to cover existing window content.
*/
public static final int FEATURE_ACTION_MODE_OVERLAY = 10;
上のソースコードを見ると、自分のTitleをカスタマイズするにはWindowを採用する必要があります.FEATURE_CUSTOM_TITLEという特徴を実現する.
注意しなければならないのはFEATURE_CUSTOM_TITLEというフィーチャーは他のフィーチャーと一緒に使用できません.また、setContentView()メソッドの前に使用しなければなりません(これはすべてのWindowフィーチャーが変更される必須条件です).そうしないと無効です.
まずレイアウトファイル
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@drawable/ic_launcher" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:shadowColor="#000986"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="1"
android:textColor="@android:color/white"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/ic_launcher" />
</RelativeLayout>
私はただ2枚のピクチャーだけを参加して、みんなは自分の必要に応じて要素を追加することができます
次はコードをつけます
getWindow().requestFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);
これにより、android sdk 3.0以上で実行すると表示されるカスタムTitleの効果が得られます.
次のエラーが発生しました:android.util.AndroidRuntimeException: You cannot combine custom titles with other title features
なぜなら、3.0以上のシステムではWindowがデフォルトで使用するからである.FEATURE_ACTION_BAR、私たちは自分のスタイルを使ってそれを修正する必要があります.
まず、異なるバージョンを考慮して、vlaues-v 11とvalues-v 14の2つのフォルダが3.0以上4.0以上を満たしていることを確認します.
スタイルを見てxml
背景色を変更android:windowTitleBackgroundStyleの値を変更し、タイトルバーの高さを変更するとandroid:windowTitleSizeの値を変更します
WindowActionBarフィーチャーを削除
<resources>
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">50dip</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>
<style name="CustomWindowTitleBackground">
<item name="android:background">@drawable/stripes</item>
</style>
</resources>
次にAndroidManifestを修正します.xmlファイル、タイトルバーをカスタマイズするActivityを見つけ、android:theme値を追加します.
<activity android:name=".MainActivity" android:theme="@style/activityTitlebar">