Гарнитура для элемента ContextMenu в Android

1

Как я могу добавить/изменить шрифт для элемента ContextMenu? Пожалуйста, направляйте меня.

@Override  
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
    super.onCreateContextMenu(menu, v, menuInfo);  
    menu.setHeaderTitle("Select");  
    menu.add(0, v.getId(), 0, "Item1");  
    menu.add(0, v.getId(), 0, "Item2");
    menu.add(0, v.getId(), 0, "Item3");  
}  

Я хочу изменить шрифт моих элементов, используя пользовательские файлы шрифтов (ttf).

  • 0
    что вы хотите? очистите ваш запрос.
  • 1
    Это невозможно, если вы не создадите пользовательское контекстное меню. И не похоже, что есть доступные примеры. Или вам может потребоваться использовать диалоговое окно с пользовательским внешним видом и сделать его похожим на пользовательское меню.
Показать ещё 2 комментария
Теги:
contextmenu
android-assets
typeface

2 ответа

2
Лучший ответ

Как я могу добавить/изменить шрифт для элемента ContextMenu?

Я не думаю, что есть встроенная поддержка таких вещей. Хотя вы можете достичь своей цели, выполнив AlertDialog.

Создайте новый проект Android и скопируйте + вставьте следующие файлы в папки relavant и запустите приложение; затем щелкните мышью на TextView.

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TextView android:id="@+id/hello" android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="@string/hello" />
</LinearLayout>

context_menu_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent" android:textStyle="bold">
    <!-- specify android:typeface="" -->
</TextView>

BaseActicity.java

public class BaseActicity extends Activity {

    protected void registerForCustomContextMenu(View targetView, String title, final String[] items) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(title);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.context_menu_item, items);
        // You can also specify typeface at runtime by overriding the
        // getView(int position, View convertView, ViewGroup parent) method of ArrayAdapter
        // convertView = super.getView(int position, View convertView, ViewGroup parent)
        // TextView textView = (TextView) convertView;
        // textView.setTypeface(tf, style)
        DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                onCustomContextMenuItemSelected(items, which);
            }
        };
        builder.setAdapter(arrayAdapter, onClickListener);
        OnLongClickListener onLongClickListener = new OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                builder.show();
                return true;
            }
        };
        targetView.setOnLongClickListener(onLongClickListener);
    }

    protected void onCustomContextMenuItemSelected(String[] items, int which) {
    }

}

CustomContextMenuActivity.java

public class CustomContextMenuActivity extends BaseActicity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView hello = (TextView) findViewById(R.id.hello);
        registerForContextMenu(hello);

        final String[] items = {"Red", "Green", "Blue"};
        registerForCustomContextMenu(hello, "Pick a color", items);
    }

    @Override
    protected void onCustomContextMenuItemSelected(String[] items, int which) {
        Toast.makeText(getApplicationContext(), items[which], Toast.LENGTH_SHORT).show();
    }

}

ОБНОВИТЬ

Не могли бы вы рассказать мне, как указать Typoeface во время выполнения?

Заменить следующий код

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.context_menu_item, items);

добавив следующий код

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.context_menu_item, items) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                convertView = super.getView(position, convertView, parent);
                TextView textView = (TextView) convertView;
                Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/BENGOTHB_0.TTF");
                textView.setTypeface(typeface);
                return convertView;
            }
        }
  • 0
    Превосходная работа. Большое спасибо. Не могли бы вы сказать мне, как указать Typoeface во время выполнения?
  • 0
    я обновил ответ
Показать ещё 1 комментарий
0

создать папку шрифтов в активах и добавить свой файл ttf, после того как u сможет получить доступ к вашему новому шрифтовому типу, когда захочется

Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                "fonts/BENGOTHB_0.TTF");
txt.setTypeface(tf).
  • 0
    Это не будет полезно в этом случае, так как вы не можете применить setTypeface к элементам контекстного меню

Ещё вопросы

Сообщество Overcoder
Наверх
Меню