2012-07-10 5 views
5

enter image description hereアンドロイドActionBarSherlockトップバー

私はFoursquareのようにアクションバーを持っていると思います。私が欲しいのは、の友達、探検と私のようなタブです。また、タブの上に、foursquareロゴ、Refresh and Check-Inなどのボタンを含むカスタムレイアウトをfoursquareで作成したいと考えています。タブを作成しましたが、ActionBarSherlockのタブの上のレイアウトを変更できませんでした。どうすればこの問題を解決できますか?

+0

Foursquareのアプリのプリントスクリーンをご提供できますか? – ninetwozero

+0

私はfoursquareのpsを加えました。 – BCK

+0

私は彼らがバーの個人的な実装を使用し、ActionBarSherlockを使用していないと確信しています。 –

答えて

7

Foursquareの外観を実現するには、タブの上にレ​​イアウトを作成する必要はありません。

  1. ActionbarSherlockの目的で使用しますmenu.xmlファイルに項目を追加するトップバー
  2. のロゴを作るトップバー
  3. の背景を作る:アクションバーシャーロックを使用している場合、あなたは唯一の心配する必要があります(アクションバーのシャーロックスタイルを使用するスタイルがアクティビティに添付されている限り)上部のセクションにボタンを配置します。

ので、1と2のために、それはすべてのstyles.xmlファイル(RESフォルダ内の値フォルダに配置する必要があります)ので、のような使用方法についてです:3の場合

<style name="Theme.Example" parent="Theme.Sherlock"> 
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> 
    <item name="absForceOverflow">true</item>  
</style> 

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar.Solid"> 
    <item name="background">@drawable/actionbar_background</item> <-- the background for top bar 
    <item name="icon">@drawable/actionbar_logo</item> <-- the logo that goes top left in the top bar 
    <item name="backgroundSplit">@drawable/bg_striped_split</item> <-- the image used between the menu items 
</style> 

をあなたが必要とするすべてのmenu.xmlの下のメニュー項目を作成している行うには(、RESフォルダ内に作成していないが場合)(メニューフォルダに存在する必要があります):

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android">  

<item android:id="@+id/menu_prefs" 
     android:icon="@drawable/settings_icon" 
     android:title="Preferences" 
     android:showAsAction="ifRoom" /> 
</menu> 

メニュー項目を参照しなければならない最後のことをアクティビティでこれらの機能を使用しています:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item) { 

    Intent intent; 

    switch (item.getItemId()) 
    { 
    case R.id.menu_prefs: 

     // Launch Preference Activity 
     intent = new Intent(getBaseContext(), Preferences.class);   
     startActivity(intent); 
     break; 
    } 

    return false; 
} 
+0

お返事ありがとうございます。 – BCK

+0

別の問題があります。あなたのコードのために、menu_prefsがクリックされたときにListNavigationまたはActionModeが必要です。また、タブがあります。これをどうすれば管理できますか? – BCK

+0

@リチャード・ルーイン - 上記の例を使用すると、「青い」トップ・ナビゲーションが私のタブの下に表示されます。なぜでしょうか?また、美化されたときに上部のバーがタブに崩れ落ちます - とにかくそれが上部に留まるようにするには? – bMon

3

カスタムアクション項目(更新、チェックインなど)を設定するには、onCreateOptionsMenu(メニューメニュー)をオーバーライドしてカスタムメニューを設定する必要があります。

例:

ファイルメニュー/ my_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/refresh" 
     android:icon="@drawable/ic_menu_refresh" 
     android:title="refresh" 
     android:showAsAction="always"> 
    </item> 

</menu> 

そして、あなたの活動(またはその断片)で:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 

    // Allow activity and fragments to add items 
    super.onCreateOptionsMenu(menu); 

    return true; 
} 

そして、彼らが選択された場合に通知するだけオーバーライドonOptionsItemSelected(メニューアイテムアイテム):

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
    case android.R.id.refresh : 
     // refresh your data... 
     return true; 

    default : 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

お返事ありがとうございます。 – BCK

+0

@Chinaski - 上記と同じです:上の例を使用すると、「青い」トップナビゲーションが私のタブの下に表示されます。なぜでしょうか?また、美化されたときに上部のバーがタブに崩れ落ちます - とにかくそれが上部に留まるようにするには? – bMon

関連する問題