Страницы

Поиск по вопросам

Показаны сообщения с ярлыком actionbar. Показать все сообщения
Показаны сообщения с ярлыком actionbar. Показать все сообщения

пятница, 14 февраля 2020 г.

Скрыть компонент из toolbar

#java #android #android_toolbar #actionbar


Как программно можно скрыть один из MenuItem на toolbar?
    


Ответы

Ответ 1



main_menu.xml ... Activity.java public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); MenuItem shareItem = menu.findItem(R.id.menu_action_share); if (что-то) shareItem.setVisible(false); //скрыть программно return true; } Если Вы хотите контролировать меню из фрагмента, то нужно вызвать setHasOptionsMenu в onCreate() фрагмента. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } Затем переопределить onCreateOptionsMenu @Override public boolean onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_menu, menu); menu.clear();//например убрать все элементы меню. return true; }

пятница, 24 января 2020 г.

Android ActionBar custom text font

#java #android #шрифты #actionbar #span


Большинство людей в интернете советуют для этого следующую конструкцию: 

SpannableString s = new SpannableString("My Title");
    s.setSpan(new TypefaceSpan(this, "My_Font.ttf"), 0, s.length(),
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    getSupportActionBar().setTitle(s);


Но у меня горит красным (this, "My_Font.ttf"). Нашёл на англицком StackOverFlow брата
по несчастью, ему посоветовали:


  please get the activity/application context and pass it to
  constructor rather than this as this will give currently running class
  while you need the current context.


Я пытался. Сначала писал MyActivity.getApplicationContext(); вместо this. Он сказал 


  non static method cannot be referenced from static context. 


Потом перед конструкцией писал Context context; context = getApplicationContext();
и в скобках Context context вместо this. В этом случае он подчёркивал уже пробел между
Context и context. Я чувствую, что хожу вокруг да около, но всё никак не попадаю. Что
делать? 

UPDATE#1

Нашёл полный код применения конструкции. Красным больше ничто не подчёркивается,
но Activity вылетает. 

class TypefaceSpan extends MetricAffectingSpan {
        /** An LruCache for previously loaded typefaces. */
        private  LruCache sTypefaceCache = new LruCache(5);

        private Typeface mTypeface;

        /**
         * Load the {@link Typeface} and apply to a spannable.
         */
        public TypefaceSpan(Context context, String typefaceName) {
            mTypeface = sTypefaceCache.get(typefaceName);

            if (mTypeface == null) {
                mTypeface = Typeface.createFromAsset(context.getApplicationContext()
                        .getAssets(), String.format("fonts/%s", typefaceName));

                // Cache the loaded Typeface
                sTypefaceCache.put(typefaceName, mTypeface);
            }
        }

        @Override
        public void updateMeasureState(TextPaint p) {
            p.setTypeface(mTypeface);
        }

        @Override
        public void updateDrawState(TextPaint tp) {
            tp.setTypeface(mTypeface);
        }}
    Context context;
    context = getApplicationContext();
    SpannableString s = new SpannableString("My Title");
    s.setSpan(new TypefaceSpan(context, "FDMedian.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(s);


UPDATE#2

логи с ошибками: 

01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
FATAL EXCEPTION: main
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.morpheus.sketc_000.morpheuscompanygames/com.morpheus.sketc_000.morpheuscompanygames.Activity2}:
java.lang.RuntimeException: native typeface cannot be made
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.os.Looper.loop(Looper.java:137)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.main(ActivityThread.java:5103)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at java.lang.reflect.Method.invokeNative(Native Method)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at java.lang.reflect.Method.invoke(Method.java:525)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at dalvik.system.NativeStart.main(Native Method)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
 Caused by: java.lang.RuntimeException: native typeface cannot be made
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.graphics.Typeface.(Typeface.java:175)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.graphics.Typeface.createFromAsset(Typeface.java:149)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.morpheus.sketc_000.morpheuscompanygames.Activity2$1TypefaceSpan.(Activity2.java:35)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.morpheus.sketc_000.morpheuscompanygames.Activity2.onCreate(Activity2.java:54)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.Activity.performCreate(Activity.java:5133)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.os.Handler.dispatchMessage(Handler.java:99) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.os.Looper.loop(Looper.java:137) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at java.lang.reflect.Method.invokeNative(Native Method) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at java.lang.reflect.Method.invoke(Method.java:525) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-25 00:18:42.939 20035-20035/com.morpheus.sketc_000.morpheuscompanygames E/AndroidRuntime:
    at dalvik.system.NativeStart.main(Native Method) 

    


Ответы

Ответ 1



Есть несколько причин, которые могут вызвать java.lang.RuntimeException: native typeface cannot be made: используете неправильное расширение разместили шрифты в папке с ресурсами (корень assets), а не внутри assets/fonts/ не добавили файл с шрифтами имя файла с шрифтом должен быть написан строчными буквами(например, надо переименовать MyFont.ttf в myfont.ttf)

воскресенье, 29 декабря 2019 г.

Как изменить цвет в ActionBar?

#android #actionbar


Как можно поменять цвет в ActionBar (android), например на синий?
    


Ответы

Ответ 1



В файле style.xml пишем следующее Ну а в минифесте прописываем нашу тему, например для всего приложения #669f36 #ffffff

Ответ 2



Можно по разному Если используется AppCompatActivity: getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.BLUE)); Если просто Activity: getActionBar().setBackgroundDrawable(new ColorDrawable(Color.BLUE)); Ещё можно задать цвет из стилей, аттрибутом colorPrimary, если ActionBar это тулбар внутри CollapsingToolbarLayout И ещё много способов, включая назначение атрибута background в разметке и назначением стилей там же. Всё от ситуации зависит.

Ответ 3



Вот работающий пример для случая public class MyActivity extends AppCompatActivity Изменяется цвет фона, заголовка и подзаголовка ActionBar. // настроим панель Action Bar Android приложения ActionBar actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(Color.DKGRAY)); actionBar.setTitle((Html.fromHtml("" + getString(R.string.app_name) + ""))); actionBar.setSubtitle((Html.fromHtml("" + getString(R.string.app_subname) + ""))) ; Приведённый выше пример со стилями меняет цвет всей Activity, а это не подойдёт, например, в случае превью фото - это превью будет залито фоном и станет "непрозрачным". Я имею в виду пример: @color/actionbar_background

воскресенье, 15 декабря 2019 г.

Убрать ActionBar (Toolbar?)

#android #actionbar #android_toolbar #android_style


Здравствуйте.

Появилась небольшая проблема:



Пустое пространство под ActionBar - на Android 4 оно не отображается, только на 5+.

Фрагмент из манифеста:




Styles.xml:


















В лаяуте про actionbar ничего нет
    


Ответы

Ответ 1



Поставьте в манифест тему android:theme="@style/AppTheme.NoActionBar" или перенесите те две строчки из NoActionBar в AppTheme

пятница, 12 июля 2019 г.

Название Tab вкладок в ActionBar

У меня имеется ActionBar в нем название Tab вкладок задано напрямую(Вкладка1,Вкладка2,Вкладка3). Подскажите как задать название вкладок через String переменные из res/values/strings.xml ? Это мне нужно для локализации приложения. public class Bormio extends FragmentActivity implements TabListener {
private ViewPager viewPager; private PagerAdapterTabsBormio mAdapter; private ActionBar actionBar;
// Tab Titles private String[] tabs = { "Вкладка1", "Вкладка2", "Вкладка3" };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bormio);
// Initialize
viewPager = (ViewPager) findViewById(R.id.pager); actionBar = getActionBar(); mAdapter = new PagerAdapterTabsBormio(getSupportFragmentManager()); Исправил - теперь такой код private ViewPager viewPager; private PagerAdapterTabsArabba mAdapter; private ActionBar actionBar;
private Resources res = getResources(); // Tab Titles private String[] tabs = {res.getString(R.string.list1), res.getString(R.string.list2), res.getString(R.string.list3) };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arabba);
// Initialize
viewPager = (ViewPager) findViewById(R.id.pager); actionBar = getActionBar(); mAdapter = new PagerAdapterTabsArabba(getSupportFragmentManager());
viewPager.setOffscreenPageLimit(4); viewPager.setAdapter(mAdapter); actionBar.setHomeButtonEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


Ответ

Resources res = getResources(); String[] tabs = { res.getString(R.string.x1), res.getString(R.string.x2), res.getString(R.string.x3)};

среда, 24 апреля 2019 г.

Скрыть компонент из toolbar

Как программно можно скрыть один из MenuItem на toolbar?


Ответ

main_menu.xml


...


Activity.java
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); MenuItem shareItem = menu.findItem(R.id.menu_action_share); if (что-то) shareItem.setVisible(false); //скрыть программно return true; }

Если Вы хотите контролировать меню из фрагмента, то нужно вызвать setHasOptionsMenu в onCreate() фрагмента.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); }
Затем переопределить onCreateOptionsMenu
@Override public boolean onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_menu, menu); menu.clear();//например убрать все элементы меню. return true; }

суббота, 30 марта 2019 г.

Как изменить цвет в ActionBar?

Как можно поменять цвет в ActionBar (android), например на синий?


Ответ

В файле style.xml пишем следующее

Ну а в минифесте прописываем нашу тему, например для всего приложения
Ну и в файле colors.xml добавляем цвет
#669f36 #ffffff

четверг, 21 марта 2019 г.

Элементы ActionBar в Gmail

Здравствуйте!
Возникла проблема с элементом в ActionBar помеченным как 'android:showAsAction="never"' - этот элемент создается когда нет кнопки menu у смартфона.
ab_notifications.xml


strings.xml
App Notifications
NotificationActivity.java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.ab_notifications, menu); return true; }
На планшете это выглядит так (у планшета нет кнопки menu):
На смартфоне это выглядит так (итем Overview появляется после нажатия кнопки menu):

НО, всё это фигня какая-то, так как приложение Gmail опять отличилось:


Как они сделали так, что на смартфоне кнопка menu не выводит ничего, а этот элемент всегда отображается в ActionBar?


Ответ

ActionBar на Android < 3.0 будет всегда показывать внизу. android:showAsAction="never" означает, что этот элемент меню будет внутри "⋮".

четверг, 25 октября 2018 г.

Убрать ActionBar (Toolbar?)

Здравствуйте.
Появилась небольшая проблема:

Пустое пространство под ActionBar - на Android 4 оно не отображается, только на 5+.
Фрагмент из манифеста:

Styles.xml:








В лаяуте про actionbar ничего нет


Ответ

Поставьте в манифест тему android:theme="@style/AppTheme.NoActionBar" или перенесите те две строчки из NoActionBar в AppTheme