2014-01-05 1 views
4

이제 파편 및 선택한 항목이 빨간색으로 강조 표시된 탐색 드로어를 사용하고 있습니다. 강조 표시 대신 선택한 항목에 굵은 활자체를 사용합니다. 아무도 나를 말할 수있는, 어떻게 이것을 깨달을 수 있습니까?선택 후 굵은 항목 탐색 드로어

MainActivity

public class MainActivity extends Activity { 
private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 
private ActionBarDrawerToggle mDrawerToggle; 

// nav drawer title 
private CharSequence mDrawerTitle; 

// used to store app title 
private CharSequence mTitle; 

// slide menu items 
private String[] navMenuTitles; 

private ArrayList<NavDrawerItem> navDrawerItems; 
private NavDrawerListAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mTitle = mDrawerTitle = getTitle(); 

    // load slide menu items 
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu); 

    navDrawerItems = new ArrayList<NavDrawerItem>(); 

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0])); 
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1])); 
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2])); 

    mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

    // setting the nav drawer list adapter 
    adapter = new NavDrawerListAdapter(getApplicationContext(),navDrawerItems); 
    mDrawerList.setAdapter(adapter); 

    // enabling action bar app icon and behaving it as toggle button 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
      R.drawable.ic_drawer_white, //nav menu toggle icon 
      R.string.app_name, // nav drawer open - description for accessibility 
      R.string.app_name // nav drawer close - description for accessibility 
    ) { 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(mTitle); 
      // calling onPrepareOptionsMenu() to show action bar icons 
      invalidateOptionsMenu(); 
     } 

     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(mDrawerTitle); 
      // calling onPrepareOptionsMenu() to hide action bar icons 
      invalidateOptionsMenu(); 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    if (savedInstanceState == null) { 
     displayView(0); 
    } 
} 


private class SlideMenuClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     displayView(position); 
    } 
} 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    return super.onPrepareOptionsMenu(menu); 
} 

private void displayView(int position) { 
    // update the main content by replacing fragments 
    Fragment fragment = null; 
    switch (position) { 
    case 0: 
     fragment = new MainFragment(); 
     break; 
    case 1: 
     fragment = new TheoryFragment(); 
     break; 
    case 2: 
     fragment = new SettingsFragment(); 
     break; 
    default: 
     break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.frame_container, fragment).commit(); 


     mDrawerList.setItemChecked(position, true); 
     mDrawerList.setSelection(position); 
     setTitle(navMenuTitles[position]); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } else { 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 
} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getActionBar().setTitle(mTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

DrawerAdapter

public class NavDrawerListAdapter extends BaseAdapter { 

private Context context; 
private ArrayList<NavDrawerItem> navDrawerItems; 

public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){ 
    this.context = context; 
    this.navDrawerItems = navDrawerItems; 
} 

@Override 
public int getCount() { 
    return navDrawerItems.size(); 
} 

@Override 
public Object getItem(int position) {  
    return navDrawerItems.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater mInflater = (LayoutInflater) 
       context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.drawer_list_item, null); 
    } 

    TextView txtTitle = (TextView) convertView.findViewById(R.id.title); 

    txtTitle.setText(navDrawerItems.get(position).getTitle()); 

    return convertView; 
} 

}

UPD : 다른 항목으로 전환 할 때 나는이 제거되지 않습니다 방법 굵은 검사 항목을 이해 별의 대담한 스타일은 없습니다. 티.

업데이트 코드

당신의 SlideMenuClickListeners onItemClick에서
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     View rowView = view; 
     TextView tv = (TextView) rowView.findViewById(R.id.title); 
     tv.setTypeface(null, Typeface.BOLD); 
     displayView(position); 
    } 

답변

0

, Typeface.DEFAULT 모든 항목을 설정 한 다음 Typeface.DEFAULT_BOLD에 관심있는 항목을 설정합니다

for (int i = 0; i < parent.getCount(); i++) { 
    TextView v = (TextView)parent.getChildAt(i); 
    if (v != null) 
     v.setTypeface(Typeface.DEFAULT); 
} 
((TextView)view).setTypeface(Typeface.DEFAULT_BOLD); 

가 제거하려면를 선택시 강조 표시하여 displayView 방법에서 mDrawerList.setCheckedmDrawerList.setSelection을 삭제하십시오.

그러나 앱을 초기화 할 때 첫 번째 항목을 과장하는 데 어려움을 겪고 있으므로이 솔루션을 소금 한 알씩 가져 가십시오.

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
{ 
    setNavDrawerItemNormal(); 
    TextView txtview = ((TextView) view.findViewById(R.id.txtNav)); 
    txtview.setTypeface(null, Typeface.BOLD); 
} 

public void setNavDrawerItemNormal() 
{ 
    for (int i=0; i< mDrawerListView.getChildCount(); i++) 
    { 
     View v = mDrawerListView.getChildAt(i); 
     TextView txtview = ((TextView) v.findViewById(R.id.txtNav)); 
     Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf"); 
     txtview.setTypeface(font); 
    } 
} 

그리고 응용 프로그램의 초기화시 탐색 서랍의 첫 번째 항목 굵게

, 나는 목록 어댑터보기 방법을 얻을했다

6

여기 내 완벽한 솔루션은 ... ...

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.navdrawer_item, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.txtNav); 
    textView.setText(values[position]); 
    if (position == 0) { textView.setTypeface(null, Typeface.BOLD); } 

    return rowView; 
} 

그래서 여기서 항목의 위치가 0 (첫 번째 항목을 의미 함)인지 확인한 다음 굵게 표시합니다. 이 모든 것은 나를 위해 완벽하게 작동합니다! ~

+1

마크이 대답 – playmaker420

+1

작동하지만이 목록 항목의 standart 확인 가능 인터페이스를 사용하고 사용하는 것이 좋을 것 때문에 당신의 대답은, 오해의 소지가 추측 좋은 –

+0

로'myDrawerListView.setChoiceMode을 (ListView.CHOICE_MODE_MULTIPLE)'입니다. 귀하의 경우에는 반드시 CheckedTextView를 대신 사용해야합니다. –

관련 문제