Styling Duo ящик меню навигации в Android - PullRequest
0 голосов
/ 17 ноября 2018

Я делаю проект Android, где я использую Duo Navigation Drawer. Я не могу изменить стиль меню. Я хочу изменить тип шрифта и удалить маркеры из списка, см. Изображение ниже

enter image description here

Ниже моя основная деятельность

public class MainActivity extends AppCompatActivity implements DuoMenuView.OnMenuClickListener{

    private MenuAdapter mMenuAdapter;
    private ViewHolder mViewHolder;
    boolean clickAgainToExit = false;
    Typeface custom_font;

    private ArrayList<String> mTitles = new ArrayList();
    private ArrayList<Integer> mTitlesIcon = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.custom_font = AppUtils.getTypefaceblack(this);
        SetupDrawer();
    }

     private void SetupDrawer() {

        this.mTitles = new ArrayList(Arrays.asList(getResources().getStringArray(R.array.menuOptions)));

        this.mTitlesIcon = new ArrayList();
         this.mTitlesIcon.add(R.drawable.home);
        this.mTitlesIcon.add(R.drawable.add_bussiness);
        this.mTitlesIcon.add(R.drawable.news);
        this.mTitlesIcon.add(R.drawable.setting);
        this.mTitlesIcon.add(R.drawable.share_icon);

         // Initialize the views
        mViewHolder = new ViewHolder();

        // Handle toolbar actions
        handleToolbar();

        // Handle menu actions
        handleMenu();

        // Handle drawer actions
        handleDrawer();

        // Show main fragment in container
        goToFragment(new MainFragment(), false);
        this.mMenuAdapter.setViewSelected(0, true);
        setTitle(mTitles.get(0));

         View headerView = mViewHolder.mDuoMenuView.getHeaderView();

         TextView textView = (TextView) headerView.findViewById(R.id.user_name);
         textView.setTypeface(this.custom_font);
         TextView textView2 = (TextView) headerView.findViewById(R.id.app_name);
         textView2.setTypeface(this.custom_font);
         TextView textView3 = (TextView) headerView.findViewById(R.id.tvlocation);
         textView3.setSelected(true);
    }

    private void handleToolbar() {
        setSupportActionBar(mViewHolder.mToolbar);
    }

    private void handleDrawer() {
        DuoDrawerToggle duoDrawerToggle = new DuoDrawerToggle(this,
                mViewHolder.mDuoDrawerLayout,
                mViewHolder.mToolbar,
                R.string.navigation_drawer_open,
                R.string.navigation_drawer_close);

        mViewHolder.mDuoDrawerLayout.setDrawerListener(duoDrawerToggle);
        duoDrawerToggle.syncState();

    }

    private void handleMenu() {
        this.mMenuAdapter = new MenuAdapter(this.mTitles,this.mTitlesIcon);

        mViewHolder.mDuoMenuView.setOnMenuClickListener(this);
        mViewHolder.mDuoMenuView.setAdapter(mMenuAdapter);
    }

    @Override
    public void onFooterClicked() {
        Toast.makeText(this, "onFooterClicked", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onHeaderClicked() {
        Toast.makeText(this, "onHeaderClicked", Toast.LENGTH_SHORT).show();
    }

    private void goToFragment(Fragment fragment, boolean addToBackStack) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        if (addToBackStack) {
            transaction.addToBackStack(null);
        }

        transaction.add(R.id.container, fragment).commit();
    }

    @Override
    public void onOptionClicked(int position, Object objectClicked) {
        // Set the toolbar title
        setTitle(mTitles.get(position));

        // Set the right options selected
        mMenuAdapter.setViewSelected(position, true);

        // Navigate to the right fragment
        switch (position) {
//            default:
//                goToFragment(new MainFragment(), false);
//                break;

            case 0:
                Toast.makeText(getApplicationContext(),"Home",Toast.LENGTH_LONG).show();
                break;
            case 1:
                Toast.makeText(getApplicationContext(),"Personal",Toast.LENGTH_LONG).show();
                break;
            case 2:
                Toast.makeText(getApplicationContext(),"News",Toast.LENGTH_LONG).show();
                break;
            case 3:
                Toast.makeText(getApplicationContext(),"Settings",Toast.LENGTH_LONG).show();
                break;
            case 4:
                Toast.makeText(getApplicationContext(),"About",Toast.LENGTH_LONG).show();
                break;
        }

        // Close the drawer
        mViewHolder.mDuoDrawerLayout.closeDrawer();
    }

    private class ViewHolder {
        private DuoDrawerLayout mDuoDrawerLayout;
        private DuoMenuView mDuoMenuView;
        private Toolbar mToolbar;

        ViewHolder() {
            mDuoDrawerLayout = findViewById(R.id.drawer);
            mDuoMenuView = (DuoMenuView) mDuoDrawerLayout.getMenuView();
            mToolbar = findViewById(R.id.toolbar);
        }
    }
}

и ниже мое меню Адаптер

class MenuAdapter extends BaseAdapter {

    private ArrayList<View> mOptionViews = new ArrayList();
    private ArrayList<String> mOptions = new ArrayList();
    private ArrayList<Integer> mTitlesIcon = new ArrayList();

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

    public MenuAdapter(ArrayList<String> menuoptions, ArrayList<Integer> menuicons) {
        this.mOptions = menuoptions;
        this.mTitlesIcon = menuicons;
    }

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

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

    void setViewSelected(int position, boolean selected) {

        for (int i = 0; i < this.mOptionViews.size(); i++) {
            if (i == position) {
                ((DuoOptionView) this.mOptionViews.get(i)).setSelected(selected);
            } else {
                ((DuoOptionView) this.mOptionViews.get(i)).setSelected(!selected);
            }
        }
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        String str = (String) this.mOptions.get(i);

        i =((Integer) this.mTitlesIcon.get(i)).intValue();

        if(view == null){
            view = new DuoOptionView(viewGroup.getContext());
        }else{
            view = (DuoOptionView) view;
        }

        ((DuoOptionView) view).bind(str,i);
        this.mOptionViews.add(view);
        return view;
    }
}

Как изменить переосвидетельствовать это. пожалуйста, предложите мне.

Я взял эту форму ссылка

1 Ответ

0 голосов
/ 07 марта 2019

Извините за поздний ответ, но я думаю, что этот код поможет вам получить каждый элемент в представлении меню навигации для изменения цвета текста или шрифта.

В методе getView вы должны изменить дочерний вид так, как хотите:

(((TextView)((RelativeLayout)((RelativeLayout)optionView.getChildAt(0)).getChildAt(1)).getChildAt(1))).setTextColor(Color.BLACK);

полный код метода типа:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final String option = mOptions.get(position);
    // Using the DuoOptionView to easily recreate the demo
    final DuoOptionView optionView;
    if (convertView == null) {
        optionView = new DuoOptionView(parent.getContext());
        optionView.getChildAt(0);
    } else {
        optionView = (DuoOptionView) convertView;


    }
    (((TextView)((RelativeLayout)((RelativeLayout)optionView.getChildAt(0)).getChildAt(1)).getChildAt(1))).setTextColor(Color.BLACK);
    // Using the DuoOptionView's default selectors
    optionView.bind(option, null, null);
    // Adding the views to an array list to handle view selection
    mOptionViews.add(optionView);

    return optionView;
}
...