2013-06-14 4 views
1

У меня есть приложение, в котором я хочу отобразить текущий номер главы в панели действий (sherlock). Моя menu.xml выглядит следующим образом:TextView в панели действий Шерлока

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/TextView01" 
     android:title=""/> 

</menu> 

Я получаю NullPointerException при использовании следующего кода:

titleView = (TextView) findViewById(R.id.TextView01); 
titleView.setText(chapterno); 

Любая идея, как мы можем показать текст в панели действий Шерлока и обновить его динамически.

ActionBar выглядит следующим образом:

enter image description here

ответ

4

Вы должны использовать пользовательский макет в панели действий, а не пункт меню для достижения этой цели.

в onCreate()

ActionBar mActionBar = getSupportActionBar(); 
mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
mActionBar.setCustomView(R.layout.actionbar_number); 

Ваш макет должен быть:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="right" 
    android:layout_marginRight="@dimen/marginMedium" 
    android:gravity="center_vertical" 
    android:text="0" 
    android:textColor="@color/actionbar_number" 
    android:textSize="28dp" 
    android:textStyle="bold" /> 

Чтобы обновить номер:

TextView chapterNumber = (TextView) getSupportActionBar().getCustomView(); 
chapterNumber.setText(String.valueOf(number)); 

UPDATE Чтобы добавить пункт меню действий вы должны быть в состоянии делать t как обычно, просто будьте осторожны, расположение вашего пользовательского макета может перекрывать пункты меню или скрываться, если они появляются в панели действий.

в menu.xml

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

    <item 
     android:id="@+id/menu_share" 
     android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider" 
     android:icon="@drawable/ic_menu_share" 
     android:showAsAction="ifRoom" 
     android:title="@string/share" 
     android:visible="false"/> 

</menu> 

Тогда в вашей деятельности.

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

    // Locate MenuItem with ShareActionProvider 
    MenuItem item = menu.findItem(R.id.menu_share); 
    ShareActionProvider shareActionProvider = (ShareActionProvider) item.getActionProvider(); //line 387 

    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    shareIntent.setType("text/plain"); 

    shareIntent.putExtra(Intent.EXTRA_TEXT, "Test"); 
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Test"); 

    shareActionProvider.setShareIntent(shareIntent); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

    case android.R.id.home: 
     onBackPressed(); 
     break; 

    case R.id.menu_share: 
     // EXAMPLE OF WHAT YOU CAN DO 
     //   Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
     //   sharingIntent.setType("image/png"); 
     //   sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(f)); 
     //   //sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here"); 
     //   //sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Body"); 
     //   startActivity(Intent.createChooser(sharingIntent, "Share via")); 

     break; 

    default: 
     break; 

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

И как бы добавить элементы действия в эту настраиваемую панель действий. Как и для действия share, я просто добавляю в мой menu.xml, а затем раздуйте этот xml в методе onCreateOptionsMenu. – Sandeep

+0

. Вы должны создать это при создании акций. см. обновленный ответ. – Ali

+0

Это отлично работает. Но проблема, которую эта глава нет. что логотип уже не виден. Хотя между элементами действия есть много дополнений. Я попробовал уменьшить заполнение, как описано в http://stackoverflow.com/questions/9131954/is-there-a-way-to-reduce-the-spacing-between-the-action-item-conons-on-action-bar но это не сработало. Любые указатели. Изображение панели действий есть в моем посте. – Sandeep

Смежные вопросы