2013-12-14 5 views
0

Я потратил весь день на поиск ответа, нашел много, но все они не то, что мне нужно. Итак, у меня есть довольно простое меню с ListView и файл для элементов с TextView. Я хочу установить шрифт Segoe-Print для элементов в моем меню, я знаю, что мне нужен адаптер, но я не могу этого сделать. Помогите!!!Установите шрифт для ListView, Android

menu.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

    <LinearLayout android:id="@+id/menu_top" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/menu_top"> 
     </LinearLayout> 

<ListView 
      android:id="@+id/ListView_Menu" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@drawable/fon_android" 
      android:divider="@drawable/menu_line" 
      android:textStyle="bold" > 
</ListView> 
</LinearLayout> 

menu_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/menu_prop" 
android:layout_width="fill_parent" 
android:textSize="19px" 
android:text="test string" 
android:layout_gravity="left" 
android:layout_height="wrap_content" 
android:shadowRadius="5" 
android:textColor="@color/menu_color" 
android:shadowDy="3" 
android:shadowDx="3" /> 

Часть Main_Menu.java:

public class Main_menu extends Activity { 
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.menu); 
     ListView menuList = (ListView) findViewById(R.id.ListView_Menu); 
     String[] items = { 
       getResources().getString(R.string.system), 
       getResources().getString(R.string.convert), 
       getResources().getString(R.string.forks), 
       getResources().getString(R.string.margin)}; 
     ArrayAdapter<String> adapt = new ArrayAdapter<String>(this,R.layout.menu_item, items); 
    menuList.setAdapter(adapt); 
} 

CustomAdapter.java:

public class CustomAdapter extends ArrayAdapter<String> { 

     public CustomAdapter(Context context, int resource, String[] objects) { 
    super(context, resource, objects); 
    // TODO Auto-generated constructor stub 
} 

    public View getView (int position, View convertView, ViewGroup parent) { 
       View view = super.getView(position, convertView, parent); 
       TextView textView = (TextView) view.findViewById(R.id.menu_prop); 
       Typeface font = Typeface.createFromAsset(getAssets(), "segoe_print.ttf"); 
       textView.setTypeface(font); 
      return textView; 
     } 

    private AssetManager getAssets() { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    } 

шрифт не меняется ...

ответ

-1

попробовать в XML:

android:fontFamily="somefont.ttf" 

От андроид 4.1+ следующего шрифта доступны: http://robotofont.com/

android:fontFamily="sans-serif" 
android:fontFamily="sans-serif-thin"   
android:fontFamily="sans-serif-light"  
android:fontFamily="sans-serif-condensed" 

вы также можете установить шрифт программно:

TextView t = (TextView) findViewById(R.id.name); 
Typeface font = Typeface.createFromAsset(getAssets(),"font/somefont.ttf"); 
t.setTypeface(font); 

поместить файл шрифта в папку ...

+0

Благодарим вас, но - нет, нет, это не работает. У меня уже есть файл с шрифтом в папке «assets». Но ваш код - это для TextView. Мне нужен код для ListView. Он должен использовать специальный адаптер, но как «выглядит» этот адаптер - я не знаю. – Rm1

+0

вам необходимо создать пользовательский адаптер – 5er

+0

@ user2877972 Для изменения шрифта вам не нужен специальный адаптер.Установка атрибутов «TextView» в элементах списка будет достаточной. ('TextView' находятся в 'ListView'. Вы не устанавливаете атрибуты в содержащем' ListView', а фактическом 'TextView'.) – laalto

0

здесь код для заказа адаптера:

private class CostumiseAdapter extends ArrayAdapter<item>{ 

public CostumiseAdapter(ArrayList<item> items) { 
super(getActivity(), 0, items); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
if(convertView == null){ 
convertView = getActivity().getLayoutInflater().inflate(R.layout.scroll_fragment, null); 
} 

Item item = getItem(position); 

TextView text = (TextView) convertView.findViewById(R.id.text_view); 
text.setText(item.mString); 

RadioButton b1 = (RadioButton) convertView.findViewById(R.id.radio_b1); 
b1.setChecked(item.mB1); 

RadioButton b2 = (RadioButton) convertView.findViewById(R.id.radio_b2); 
b2.setChecked(item.mB2); 

CheckBox cB = (CheckBox) convertView.findViewById(R.id.check_box); 
cB.setChecked(item.mB2); 

return convertView; 
} 
} 

Я беру его с http://androide-examples.blogspot.com/2013/11/android-scroll-list.html см для полного примера.

В этом примере приведены некоторые ошибки semantik. Поэтому вам нужно исправить некоторые предметы в Items (capizeize) ...

+0

@ user2877972 это вам полезно? – 5er

+0

Похоже, я обхожу закрытую дверь, которую мне просто нужно тянуть, но не толкайте, как я пытаюсь. Сегодня я буду внимательно читать документацию - механизм адаптера еще не понят. – Rm1

0

Вам необходимо создать пользовательский адаптер для настройки пользовательского шрифта. Здесь минимальный код:

public class CustomAdapter extends ArrayAdapter<String> { 
    //Contructor here 

     public View getView (int position, View convertView, ViewGroup parent) { 
       View view = super.getView(position, convertView, parent); 
       TextView textView = (TextView) view.findViewById(R.id.myTextView); 
      // Here you set the typeface as you do for the TextView 
       textView.setTypeFace(....); 
     } 
    } 

Это должно предоставить вам специальный шрифт для вашего списка.

+0

Что-то не так ... Пожалуйста, посмотрите на первое сообщение - я его отредактировал. – Rm1

0

Я нашел решение! Ну, прежде всего я создаю еще один класс для адаптера:

public class Typefaces { 
    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>(); 
    public static Typeface get(Context c, String name) { 
    synchronized (cache) { 
    if (!cache.containsKey(name)) { 
    String path = "fonts/"+name; 
    try { 
    Typeface t = Typeface.createFromAsset(c.getAssets(), path); 
    cache.put(name, t); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 
    return cache.get(name); 
    } 
    } 
    } 

Затем в главном адаптере я добавил две строки:

Typeface tf = Typefaces.get(getContext(), "tahoma.ttf"); 
     holder.txtTitle.setTypeface(tf); 

Вот и все! Работает!)) Спасибо всем за помощь и ответы.

1
view.txtViewTitle.setTypeface(Typeface.createFromAsset(parent 
       .getContext().getAssets(), "fonts/DroidSerif.ttf")); 
+0

http://codinglookseasy.blogspot.in/2012/08/localization-using-ttf-files.html – Android

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