0

現在のメニュー項目のサイズを変更するには、助けが必要です。にプログラムで項目を追加してカスタム メニューを作成しましたTableLayout。これは私の現在のメニューです:

これが私の現在のメニューです

最初のメニューの高さを変更する必要があります。問題は、最初のメニュー項目の高さを変更すると、メニュー全体の高さが変わることです。私はこのようなメニューが欲しい:

こんなメニューが欲しい

現在のアイテムのサイズを変更する方法はありますか?

public synchronized void show(View v) {
    mIsShowing = true;
    boolean isLandscape = false;
    int itemCount = mMenuItems.size();
    if (itemCount<1) return; //no menu items to show
    if (mPopupWindow != null) return; //already showing
    Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    if (display.getWidth() > display.getHeight()) isLandscape = true;
    View mView= mLayoutInflater.inflate(R.layout.custom_menu, null);
    mPopupWindow = new PopupWindow(mView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT, false);
    mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
    mPopupWindow.setWidth(display.getWidth());
    mPopupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);

    int divisor = mItemsPerLineInPortraitOrientation;
    if (isLandscape) divisor = mItemsPerLineInLandscapeOrientation;
    int remainder = 0;
    if (itemCount < divisor) {
        mRows = 1;
        remainder = itemCount;
    } else {
        mRows = (itemCount / divisor);
        remainder = itemCount % divisor;
        if (remainder != 0) mRows++;
    }
    TableLayout table = (TableLayout)mView.findViewById(R.id.custom_menu_table);
    table.removeAllViews();

    for (int i=0; i < mRows; i++) {
        TableRow row = null;
        TextView tv = null;
        ImageView iv = null;

        row = new TableRow(mContext);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        for (int j=0; j< divisor; j++) {
            if (i*divisor+j >= itemCount) break;
            final CustomMenuItem cmi = mMenuItems.get(i*divisor+j);
            View itemLayout = mLayoutInflater.inflate(R.layout.custom_menu_item, null);
            if  (j==0)
            {
                itemLayout.setBackgroundResource(R.drawable.current_menu);
                itemLayout.setPadding(5, 5, 5, 5);
            }

            tv = (TextView)itemLayout.findViewById(R.id.custom_menu_item_caption);
            tv.setText(cmi.getCaption());
            iv = (ImageView)itemLayout.findViewById(R.id.custom_menu_item_icon);
            iv.setImageResource(cmi.getImageResourceId());
            itemLayout.setOnClickListener( new OnClickListener() {
               @Override
               public void onClick(View v) {
                    mListener.MenuItemSelectedEvent(cmi);
                    if (mHideOnSelect) hide();
               }
            });
            row.addView(itemLayout);
        }
        table.addView(row);
    }
}

この行 itemLayout.setBackgroundResource(R.drawable.menubackground); でレイアウト(各メニュー項目)に背景を与える場合 、結果よりも行全体に背景を与える 場合;ここに画像の説明を入力

しかし、私はこのメニューのようになりたい ここに画像の説明を入力

4

1 に答える 1

1

必要なことを行う簡単な方法は、メニューをTableLayout通常よりも少し大きくし (選択したメニューの高さと同じ高さにする必要があります)、上部のパディングまたはマージンを他のメニュー項目に追加することです。現在選択されているもの。そのため、1 つのアイテムが常に他のすべてのアイテムよりも高くなり、上部に少しスペースができます。

編集:LayoutParams特にTableLayoutand を使用する場合は、適切なを使用してくださいTableRow

row = new TableRow(mContext);
row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
// ...
View itemLayout = mLayoutInflater.inflate(R.layout.custom_menu_item, row, false);

パディングの代わりにマージンを使用してみてください:

//...
for (int j=0; j< divisor; j++) {
   if (i*divisor+j >= itemCount) break;
   final CustomMenuItem cmi = mMenuItems.get(i*divisor+j);
   View itemLayout = mLayoutInflater.inflate(R.layout.custom_menu_item, row, false);
   TableRow.Layoutparams lp = (TableRow.LayoutParams)itemLayout.getLayoutParams(); 
   if  (j==0) {
     lp.topMargin = 0; 
     itemLayout.setBackgroundResource(R.drawable.current_menu);
     itemLayout.setPadding(5, 5, 5, 5);
   } else {
     lp.topMargin = 12;
   }
   // ...
   itemLayout.setOnClickListener( new OnClickListener() {
       @Override
       public void onClick(View v) {
             mListener.MenuItemSelectedEvent(cmi);
             if (mHideOnSelect) hide();
             TableRow parent = (TableRow) v.getParent();
             final int count = parent.getChildCount();
             for (int i = 0; i < count; i++) {
                 final View child = parent.getChild(i);  
                 final TableRow.LayoutParams lp = (TableRow.LayoutParams) child.getLayoutParams();
                 if (child == v) {
                      lp.topMargin = 0;
                 } else {
                      lp.topMargin = 12;
                 }       
             } 
       }
    });

セル間のスペースについては、あなたの画像でもわかりません。

于 2013-02-14T07:38:02.330 に答える