如何创建设置活动以从底部显示屏幕的一半? [关闭]

Posted

技术标签:

【中文标题】如何创建设置活动以从底部显示屏幕的一半? [关闭]【英文标题】:How create setting activity to appear half of the screen from bottom? [closed] 【发布时间】:2016-04-05 09:33:09 【问题描述】:

我想做一个如图所示的设置活动。我开发这种屏幕的逻辑应该是什么?请帮助我,因为我是 android 新手,我想要这种类型的活动。我尝试了很多解决方案,但没有找到像我与您分享的图像。

提前致谢

【问题讨论】:

使用偏好创建底部表github.com/soarcn/BottomSheet 【参考方案1】:

最好的选择是为此使用bottomSheet lib。


但你还是想做你自己,就按照下面的方式去做吧。

创建下面的方法

public void openBottomSheet() 

    View view = getLayoutInflater().inflate(R.layout.bottom_sheet_emp_cov, null);
    Spinner spin1 = (Spinner) view.findViewById(R.id.spin1);
    Spinner spin2 = (Spinner) view.findViewById(R.id.spin2);
    ListView catList = (ListView) view.findViewById(R.id.listItems);
    Button btnDone = (Button) view.findViewById(R.id.btnDone);

    final Dialog mBottomSheetDialog = new Dialog(RepActivity.this,
            R.style.MaterialDialogSheet);
    mBottomSheetDialog.setContentView(view);
    mBottomSheetDialog.setCancelable(true);
    mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
    mBottomSheetDialog.show();

    spin1.setAdapter(new ArrayAdapter<String>(RepActivity.this, android.R.layout.simple_dropdown_item_1line, items));
    spin2.setAdapter(new ArrayAdapter<String>(RepActivity.this, android.R.layout.simple_dropdown_item_1line, items));

    catList.setAdapter(categoryListAdapter);

    btnDone.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            mBottomSheetDialog.dismiss();
        
    );


bottom_sheet_emp_cov 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/popup_window"
    android:layout_
    android:layout_
    android:layout_gravity="bottom|center"
    android:background="@android:color/white"
    android:orientation="vertical">

    <LinearLayout
        android:layout_
        android:layout_
        android:background="@color/colorPrimary"
        android:orientation="horizontal"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:weightSum="3">

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="2"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/txt_uninstall"
                android:layout_
                android:layout_
                android:gravity="center_vertical"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/white"
                android:textSize="@dimen/font_normal_size" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:gravity="center|right"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btnDone"
                android:layout_
                android:layout_
                android:text="Done" />
        </LinearLayout>


    </LinearLayout>

    <TextView
        android:id="@+id/textView13"
        android:layout_
        android:layout_
        android:padding="10dip"
        android:text="Select Zone:"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/colorAccent"
        android:textSize="@dimen/font_normal_size_small"
        android:textStyle="bold" />

    <Spinner
        android:id="@+id/spin1"
        android:layout_
        android:layout_
        android:layout_marginBottom="5dip"
        android:layout_marginTop="5dip" />

    <View
        android:layout_
        android:layout_
        android:background="@color/gray" />

    <TextView
        android:id="@+id/textView1"
        android:layout_
        android:layout_
        android:padding="10dip"
        android:text="Select Region:"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/colorAccent"
        android:textSize="@dimen/font_normal_size_small"
        android:textStyle="bold" />

    <Spinner
        android:id="@+id/spin2"
        android:layout_
        android:layout_
        android:layout_marginBottom="5dip"
        android:layout_marginTop="5dip" />

    <View
        android:layout_
        android:layout_
        android:background="@color/gray" />

    <ListView
        android:id="@+id/listItems"
        android:layout_
        android:layout_
        android:layout_marginBottom="5dip"
        android:layout_marginTop="5dip"
        android:choiceMode="singleChoice"
        android:divider="@null"
        android:dividerHeight="0dp" />

</LinearLayout>

MaterialDialogSheet 样式

<style name="MaterialDialogSheet" parent="@android:style/Theme.Dialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
    </style>

    <style name="MaterialDialogSheetAnimation">
        <item name="android:windowEnterAnimation">@anim/popup_show</item>
        <item name="android:windowExitAnimation">@anim/popup_hide</item>
    </style>

popup_show 动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="100%p"
        android:toYDelta="0"
        android:duration="300"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

popup_hide 动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="0"
        android:toYDelta="100%p"
        android:duration="300"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

【讨论】:

谢谢。你的回答对我帮助很大。非常感谢。【参考方案2】:

首先你需要为SettingsActivity使用这个主题来给它透明背景

    <style name="Theme.Transparent4" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowDisablePreview">true</item>
</style>

然后在您的活动中,您可以设置它的宽度和高度 如果你想要它的一半屏幕 您可以以编程方式设置它的高度 父视图全部占用所有屏幕空间 然后创建子布局 以及它的高度

 contentView.getLayoutParams().height=screenheight/2;

【讨论】:

投反对票的人能否请您说明投反对票的原因??!! 感谢@Tony 的快速回复。我现在也是这么想的。我会尝试你的解决方案,并让你知道。 你是 wlc,@AkhilGite 告诉我你是否遇到任何问题 @AkhilGite 你的问题解决了吗? 是的。我用过@Dhawal 的解决方案。它很容易。我也试过你的soln,但比较他的soln更好。谢谢。

以上是关于如何创建设置活动以从底部显示屏幕的一半? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将页脚保持在屏幕底部[重复]

如何设置主活动中显示的默认片段?

android如何弹出一个占屏幕一半的菜单

如何设置字幕的位置,目前显示在屏幕底部,我们需要设置它从底部向上30px?

故事板约束问题:屏幕高度的一半

在屏幕/视图底部设置 admob 横幅?