【问题标题】:Horizontal scrolling footer menu in AndroidAndroid中的水平滚动页脚菜单
【发布时间】:2013-08-26 05:21:54
【问题描述】:

我想向我的应用程序屏幕添加页脚菜单。页脚菜单将具有菜单图标,当按下左箭头或右箭头时,这些图标可以水平滚动一个菜单。根据菜单屏幕,页脚菜单应滚动到该菜单屏幕的菜单图标。

例如:

    ----------------------------------------
     <   menu1     |  menu2  |   menu3   >
   -----------------------------------------

假设有 6 个菜单图标,每次可见 3 个。按右箭头,它应该一次滚动一个项目。

如果我的屏幕与菜单 4 相关,则必须定位 menu4。

   ----------------------------------------
     <   menu4     |  menu5  |   menu6   >
   -----------------------------------------

而且每个菜单项都应该是可点击的。

请告诉我,我如何以编程方式实现这一目标。

感谢和问候

【问题讨论】:

  • 使用 Horizo​​ntalScrollView
  • 我想做xyz;告诉我怎么做。不!
  • 我猜你必须自己做 =/
  • 嗨,Tarun,我使用了 Horizo​​ntalScrollView。但是如何滚动到特定的菜单图标!!!!。有什么建议吗?
  • @BobbyDigital 我认为这个答案stackoverflow.com/a/18401858/2398886 满足了这个问题!

标签: android menu footer horizontal-scrolling


【解决方案1】:

希望对你有帮助:

使用below code which has Exact Solution ( Programmatically with Explanation ) 回答您的问题!

我已经完全按照您在问题中提到的那样测试了它及其提供的输出!

public class MainActivity extends Activity implements OnClickListener {
    Context context;
    int scrWidth, scrWidth80by3, scrWidth10;
    Button btnMenu[], btnNext, btnPre;
    LinearLayout llRoot, llHsMain, llMenuGroup1, llMenuGroup2;
    HorizontalScrollView hScrollView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        scrWidth = dm.widthPixels;
        scrWidth = (int) (0.8 * scrWidth); // Calculating 80 % Width of Screen for Horizontal Scroll View
        scrWidth80by3 = (int) (scrWidth / 3); // Calulation 1/3 of Width of  Horizontal Scroll View for 3  menu items
        scrWidth10 = (int) (0.1 * scrWidth);// Calulation 10% Width of Screen for Previous And Next Button

        context = MainActivity.this;

        btnMenu = new Button[7];

        llMenuGroup1 = new LinearLayout(context);
        llMenuGroup2 = new LinearLayout(context);

        llMenuGroup1.setLayoutParams(new LayoutParams(scrWidth,
                LayoutParams.WRAP_CONTENT));
        llMenuGroup2.setLayoutParams(new LayoutParams(scrWidth,
                LayoutParams.WRAP_CONTENT));
        for (int i = 1; i < btnMenu.length; i++) {
            // Starting from int i=1  to Set Menu Item Counting from 1 like Menu 1 instead of Menu 0
            btnMenu[i] = new Button(context);
            btnMenu[i].setId(i);
            btnMenu[i].setOnClickListener(this);
            btnMenu[i].setLayoutParams(new LayoutParams(scrWidth80by3,
                    LayoutParams.WRAP_CONTENT));
            btnMenu[i].setText("Menu" + i);
            if (i <= 3) {
                llMenuGroup1.addView(btnMenu[i]);
            } else {
                llMenuGroup2.addView(btnMenu[i]);
            }
        }

        btnNext = new Button(context);
        btnNext.setOnClickListener(this);
        btnNext.setId(0);
        btnPre = new Button(context);
        btnPre.setOnClickListener(this);
        btnPre.setId(-1);

        //  llRoot its Main Root Layout ! 
        llRoot = new LinearLayout(context);
        llRoot.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        btnNext.setLayoutParams(new LayoutParams(scrWidth10,
                LayoutParams.WRAP_CONTENT));
        btnNext.setText(">");
        btnPre.setLayoutParams(new LayoutParams(scrWidth10,
                LayoutParams.WRAP_CONTENT));
        btnPre.setText("<");

        //  hScrollView its HorizontalScrollView ! 
        hScrollView = new HorizontalScrollView(context);
        hScrollView.setLayoutParams(new LayoutParams(scrWidth,
                LayoutParams.WRAP_CONTENT));

        // As HorizontalScrollView can Have one Direct Child ! so llHsMain is one Direct Child of hScrollView!
        llHsMain = new LinearLayout(context);
        llHsMain.setLayoutParams(new LayoutParams(scrWidth,
                LayoutParams.WRAP_CONTENT));

        //Adding Menu Group1 And Menu Group 2 to  llHsMain as its Direct Child of hScrollView
        llHsMain.addView(llMenuGroup1);
        llHsMain.addView(llMenuGroup2);

        //Adding Direct Child llHsMain to hScrollView
        hScrollView.addView(llHsMain);

        //  Adding views to llRoot (its Main Root Layout) ! 
        llRoot.addView(btnPre);
        llRoot.addView(hScrollView);
        llRoot.addView(btnNext);

        //Displaying llRoot (its Main Root Layout) !
        setContentView(llRoot);  
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case -1: // Previous Button Clicked
            hScrollView.scrollTo(-scrWidth, 0); // see -ve sign to scroll back horizontally only scrWidth is 80% of Total Screen
            break;
        case 0: // Next Button Clicked
            hScrollView.scrollTo(scrWidth, 0); // scrolls next horizontally only scrWidth is 80% of Total Screen
            break;

        case 1: // Menu Button1 Clicked
            Toast.makeText(getApplicationContext(), "Menu 1 Clicked",1).show();
            break;

            // repeat up to 6

        case 6:
            Toast.makeText(getApplicationContext(), "Menu 6 Clicked",1).show();
            break;
        default:
            break;
        }

    }
}

【讨论】:

    【解决方案2】:

    使用HorizontalScrollView 并将LinearLayout 添加为子级。在LinearLayout 中添加菜单按钮

    测量菜单按钮的宽度 (getWidth()) 并单击左或右按钮使用smoothScrollBy ( width of menu button + padding ,0); 滚动视图,或者您也可以使用scrollBy(x,y)

    【讨论】:

      【解决方案3】:

      其实我对android还太陌生,但我自己也做过一些相关的事情。

      您可以做的是,创建一个单独的布局文件并使用 layoutInflater 将其加载到您的 horizontal scrollview

      你可以定义他们对应的onTouchListener的菜单。

      另一种方法是,您可以定义自己的菜单(与菜单文件夹下的 main.xml 相同)并在页脚水平滚动视图布局中对其进行扩展

      【讨论】:

        猜你喜欢
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多