2015-11-16 2 views
1

У меня есть два вопроса о шаблоне навигационного ящика, который дает студию Android.Android-навигатор, изменение цвета текста/наведения

ScreenShot of the app)

Я хочу, чтобы изменить цвет текста меню («Notre Histoire» и т.д.) и парить выбранный элемент (здесь он зеленый, я хочу сделать это в другом цвете).

Как вы можете видеть, мне удалось изменить цвет фона панели действий (здесь в розовом) и изменить фон меню (здесь в синем).

Но в моей ситуации я не нашел, как я могу изменить цвет текста и наведение выбранных элементов.

Мое ограничение заключается в том, что я не могу прикоснуться к файлам xml. Я должен делать это программно.

Вот как Даю меню строки для приложения:

String [] strTabMenu = new String[2]; 
strTabMenu[0] = "test1"; 
strTabMenu[1] = "test2"; 

mDrawerListView.setAdapter(new ArrayAdapter<String>(
       getActionBar().getThemedContext(), 
       android.R.layout.simple_list_item_activated_1, 
       android.R.id.text1, 
       strTabMenu)); 

Итак, как я теперь, с какой строки кода, изменить цвет текста и цвет парения без создания/обновления некоторых XML-файлов ?

Спасибо =)

ответ

2

Вместо использования ArrayAdapter по умолчанию от Android вы можете написать свой собственный список адаптер:

public class DrawerListAdapter extends BaseAdapter{ 

private Context context; 
private String[] mTitle; 
private int[] mIcon; 
private LayoutInflater inflater; 

public DrawerListAdapter(Context pContext, String[] pTitle, int[] pIcon) { 
    super(); 
    context = pContext; 
    mTitle = pTitle; 
    mIcon = pIcon; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rootView = inflater.inflate(R.layout.navigation_drawer_list_item, parent, false); 

    TextView txtTitle = (TextView) rootView.findViewById(R.id.drawer_text); 
    ImageView imgIcon = (ImageView) rootView.findViewById(R.id.drawer_icon); 

    if(((ListView)parent).isItemChecked(position)) { 
      txtTitle.setTextColor(parent.getResources().getColor(R.color.DarkerRed)); 
    } 
    txtTitle.setText(mTitle[position]); 
    imgIcon.setImageResource(mIcon[position]); 

    return rootView; 
} 

@Override 
public int getCount() { 
    return mTitle.length; 
} 

@Override 
public Object getItem(int position) { 
    return mTitle[position]; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

}

Внутри заявление, если-(isItemChecked) вы могли бы прямо сейчас измените цвет фона вашего текстового вида.

+0

Хмм, спасибо за это решение, я попробую это как можно скорее. Но я удивлен тем, что для этого нет простой функции. – Lucsartes

+0

Альтернативный взгляд на этот вопрос: stackoverflow.com/q/23396434/3537599 – Oliver

+0

Это та же проблема, я не могу поверить, что лица, которые создают этот шаблон, создают функцию, такую ​​как 'mDrawerListView.addHeaderView (iv); mDrawerListView.addFooterView (iv); ' и не представляйте себе простую функцию, такую ​​как ' mDrawerListView.setHoverItem (цвет c); mDrawerListView.setItemTextColor (цвет c); ' Я стараюсь как можно меньше изменить код Java, а создать новый класс для этого слишком много. – Lucsartes

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