【问题标题】:Android Fragment/ViewPager - ViewGroups losing background colorAndroid Fragment/ViewPager - ViewGroups 失去背景颜色
【发布时间】:2016-07-08 13:34:18
【问题描述】:

我正在使用带有由 Android Studio 生成的“选项卡式活动”的 ViewPager。

当我运行应用程序时,正确的布局会加载到正确的片段中,您可以轻松地在片段之间滑动。布局是正确的,所有的背景颜色都设置好了。

不幸的是,一旦您滑动到另一个片段,所有Layouts (ViewGroups) 都会失去背景颜色,这意味着它们会变得透明。里面的景色还是一样的。

示例:底部的 EditText 位于应为白色(左图)但变为灰色(右图)的 LinearLayout 内。

两个屏幕截图:1)加载时和 2)滑动后

​​>

最奇怪的是,如果你滑动到一个片段并且它失去了背景,如果你向左或向右滑动一点,一切都会恢复正常,而不改变标签。

可能是什么问题?

代码

适配器

public class PageAdapter extends FragmentPagerAdapter {

    public PageAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PageFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 4 total pages.
        return 4;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "POS: " + position;
    }
}

片段

public class PageFragment extends Fragment {
    private static final String WHICH = "WHICH";

    /**
     * The fragment argument representing the section number for this
     * fragment.
     */

    public PageFragment() {}

    public static PageFragment newInstance(int which){
        PageFragment page = new PageFragment();
        Bundle args = new Bundle();
        args.putInt(WHICH, which);
        page.setArguments(args);
        return page;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView;
        switch(getArguments().getInt(WHICH)){
            case 1:
                rootView = inflater.inflate(R.layout.activity_one, container, false);
                break;
            case 2:
                rootView = inflater.inflate(R.layout.activity_two, container, false);
                break;
            case 3:
                rootView = inflater.inflate(R.layout.activity_four, container, false);
                break;
            case 4:
                rootView = inflater.inflate(R.layout.activity_five, container, false);
                break;
            default:
                rootView = inflater.inflate(R.layout.activity_defautlt, container, false);
                break;
        }
        return rootView;
    }
}

LinearLayout 背景不正确:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout_id"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:layout_alignParentLeft="true"
        android:background="@color/white"
        android:gravity="center"
        android:weightSum="1">

        <EditText
            android:layout_width="0dp"
            android:layout_weight=".85"
            android:layout_height="match_parent"
            android:textColor="@color/grey_2"
            style="@style/inputDefault"
            android:minLines="1"
            android:maxLines="5"
            android:gravity="start|center"
            android:paddingStart="@dimen/activity_horizontal_margin_medium"
            android:paddingEnd="@dimen/activity_horizontal_margin_medium"
            android:inputType="textMultiLine"
            android:hint="@string/write_message"
            android:id="@+id/chatroom_editText" />

        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".15"
            android:src="@drawable/ic_send_black_24dp"
            style="@style/btnImage"
            android:id="@+id/chatroom_send_btn"
            android:onClick="sendItem"
            android:background="@color/white"
            android:layout_margin="0dp"
            android:padding="0dp"
            />

</LinearLayout>

<style name="inputDefault">
    <item name="android:layout_marginRight">0dp</item>
    <item name="android:layout_marginLeft">0dp</item>
    <item name="android:layout_marginTop">@dimen/activity_vertical_margin_small</item>
    <item name="android:layout_marginBottom">@dimen/activity_vertical_margin_small</item>
    <item name="android:paddingTop">@dimen/activity_vertical_margin_small</item>
    <item name="android:paddingBottom">@dimen/activity_vertical_margin_small</item>
    <item name="android:background">@color/white</item>
    <item name="android:textColor">@color/grey_2</item>
    <item name="android:textColorHint">@color/grey_3</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textCursorDrawable">@null</item>
    <item name="android:stateListAnimator" tools:targetApi="lollipop">@null</item>
</style>

【问题讨论】:

  • 分享一些代码...特别是你的适配器和你的片段
  • @GuilhermeP 感谢您的帮助。代码在那里。如前所述,这基本上就是从 Android Studio 生成的东西。
  • @Barthy 他们俩都是黑人你有什么问题?它应该是白色的,而不是?
  • @Amir 底部的 EditText 在应该是白色(左图)但变成灰色(右图)的 LinearLayout 内
  • @Barthy 把你的 EditText 的背景 android:background="@null"

标签: android android-layout android-fragments android-viewpager


【解决方案1】:

实际上它与您的LinearLayoutTabActivity 等无关。这是EditText 的常见行为。

如果您希望您的EditText 背景是透明的,或者在您的情况下为白色,则无需定义android:background="@color/white",只需将背景设置为@null,其余的就可以了。

【讨论】:

  • 22 小时内赏金。你能解释为什么保证金不透明吗?因为EditText 应该只覆盖其父级的中心,顶部和底部都有边距。边距应该是透明的并显示 LinearLayout 的背景,或者不是?
  • @Barthy 为什么在定义边距时应该是透明的?如果你想要定义什么边距或填充,看看到底发生了什么,只需打开你的布局绑定。
  • @settings->开发者选项 --> 显示布局边界
猜你喜欢
  • 2017-05-22
  • 2012-05-14
  • 2016-11-14
  • 2012-07-22
  • 2012-06-10
  • 2023-04-03
  • 1970-01-01
  • 2019-11-10
  • 2015-08-13
相关资源
最近更新 更多