簡體   English   中英

帶有下拉菜單和非下拉菜單的左側菜單 android java

[英]a left menu with dropdown and non-dropdown menus android java

早上好,如何用這種邏輯制作菜單? 什么是邏輯? 這次我用的是ExpandableListview,它把它們都做成了下拉菜單,我用recycler試過了,我不能把下拉菜單變成它的一部分。 我應該用什么?

在此處輸入圖像描述

您需要創建一個自定義復合視圖並使用 animation 進行淡入/淡出或 dropDown/dropUp 效果這是我的示例代碼,您可以根據需要對其進行優化:

結果:

在此處輸入圖像描述

activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.junk3.Menu
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </com.example.junk3.Menu>
</androidx.constraintlayout.widget.ConstraintLayout>

drop_down_menu.xml:

    <?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000">

        <LinearLayout
            android:id="@+id/box_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <LinearLayout
                android:id="@+id/item_1"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FF0000"
                android:orientation="horizontal"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

                <TextView
                    android:id="@+id/textView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="item_1 (click me)"
                    android:textColor="#000000" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/item_1_detail"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="1dp"
                android:background="#FFFFFF"
                android:orientation="vertical"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/item_1">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="item_1_1"
                        android:textColor="#000000" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/textView3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="item_1_2"
                        android:textColor="#000000" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/textView4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:text="item_1_3"
                        android:textColor="#000000" />
                </LinearLayout>
            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/box_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="1dp"
            android:orientation="vertical"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/box_1">

            <LinearLayout
                android:id="@+id/item_2"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FF0000"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/textView5"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="item_2   (click me)"
                    android:textColor="#000000" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/item_2_detail"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:background="#FFFFFF"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/textView7"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="item_2_1"
                    android:textColor="#000000" />
            </LinearLayout>
        </LinearLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>
</merge>

MainActivity.java:

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import com.example.junk3.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    lateinit var text:TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)



    }
}

菜單.java:

import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Menu extends LinearLayout {

    private Context ctx;
    private LinearLayout item_1,item_2,item_1_detail,item_2_detail;

    public Menu(Context context, AttributeSet attrs) {
        super(context, attrs);
        ctx = context;
        initView(ctx);


    }

    public Menu(Context context) {
        this(context, null);
        ctx = context;
        initView(ctx);
    }

    public Menu(Context context, AttributeSet attrs,int defSyle){
        super(context,attrs,defSyle);
        ctx = context;
        initView(ctx);


    }



    public void initView(Context context){
        LayoutInflater inflater =  (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.drop_down_menu,this);

    }


    @Override
    public void onFinishInflate() {
        super.onFinishInflate();
        item_1 = (LinearLayout) findViewById(R.id.item_1);
        item_2 = (LinearLayout) findViewById(R.id.item_2);

        item_1_detail = (LinearLayout) findViewById(R.id.item_1_detail);
        item_2_detail = (LinearLayout) findViewById(R.id.item_2_detail);
        item_1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {


                if(item_1_detail.getLayoutParams().height>0){
                    Log.e("detail_1","1");

                    slideView(item_1_detail, item_1_detail.getLayoutParams().height, 0);
                }else{
                    slideView(item_1_detail, 0, dp2px(ctx.getResources(),120));
                }

            }
        });
        item_2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(item_2_detail.getLayoutParams().height>0){
                    slideView(item_2_detail, item_2_detail.getLayoutParams().height, 0);
                }else{
                    slideView(item_2_detail, 0, dp2px(ctx.getResources(),40));
                }
            }
        });



    }


    public static void slideView(View view, int currentHeight, int newHeight) {
        Log.e("here3","ddd");
        ValueAnimator slideAnimator = ValueAnimator
                .ofInt(currentHeight, newHeight)
                .setDuration(500);

        /* We use an update listener which listens to each tick
         * and manually updates the height of the view  */

        slideAnimator.addUpdateListener(animation1 -> {
            Integer value = (Integer) animation1.getAnimatedValue();
            view.getLayoutParams().height = value.intValue();
            view.requestLayout();
        });

        /*  We use an animationSet to play the animation  */

        AnimatorSet animationSet = new AnimatorSet();
        animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
        animationSet.play(slideAnimator);
        animationSet.start();
    }

    public static int dp2px(Resources resource, int dp) {
        return (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP,
                dp,resource.getDisplayMetrics()
        );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM