ImageView被推离屏幕

时间:2017-03-22 11:44:43

标签: android xml android-layout

我有Android xml的布局问题。我很抱歉,如果这是一个noob问题,但xml对我来说是神奇的,虽然我知道它真的不应该

无论如何,这是制作麻烦的布局文件(content_activity_deal_creation):

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


<RelativeLayout 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="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".activities.DealCreationActivity"
    tools:showIn="@layout/activity_deal_creation">


    <ImageView
        android:id="@+id/imageViewDealCreation"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_add_a_photo_black_24dp"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/priceInput"
        android:hint="@string/price"
        android:textAlignment="center"
        android:layout_marginTop="18dp"
        android:layout_below="@+id/storeEditText"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/dealDescriptionEditText"
        android:hint="@string/deal_description"
        android:textAlignment="center"
        android:layout_below="@+id/imageViewDealCreation"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="18dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:id="@+id/dealTitleEditText"
        android:hint="@string/title_deal_deal_creation"
        android:layout_marginTop="18dp"
        android:layout_below="@+id/dealDescriptionEditText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/storeEditText"
        android:hint="@string/store"
        android:textAlignment="center"
        android:layout_marginTop="18dp"
        android:layout_below="@+id/dealTitleEditText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>
</ScrollView>

This is what is looks like when rendered by the phone

这是包含的activit_deal_creation.xml:

   <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
    android:fitsSystemWindows="true"
    tools:context=".activities.DealCreationActivity">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <include layout="@layout/content_activity_deal_creation" />

    </android.support.v4.widget.NestedScrollView>


    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>

当我拍照并将其放入ImageView时,情况会变得更糟。然后只有大约一半的piture是可见的。 我在这里失踪的是什么?必须能够正常放入屏幕。

我感谢任何帮助!非常感谢!

上面的代码从下面接受的答案中引出了解决方案。 谢谢您的帮助。我希望这有助于将来的某个人。

3 个答案:

答案 0 :(得分:2)

原因

首先,您的ImageView不会被推离屏幕。它仍在屏幕上,但由AppBarLayout覆盖。

通常CoordinatorLayout的布局方式与FrameLayout相同,这意味着在您的情况下,所有直接的孩子都会占据整个高度(match_parent),并且会分层,一个在每个其他,但与CoordinatorLayout有点不同。您在AppBarLayout之上看到ScrollView,因为它已应用默认依赖关系(AppBarLayout.Behavior)而CoordinatorLayout不是按正常顺序绘制所有内容,而是根据依赖关系链

解决方案

您必须将此行为添加到ScrollView。然后它将被绘制在AppBarLayout下面,而不是它。

app:layout_behavior="@string/appbar_scrolling_view_behavior"

注意:您已在RelativeLayout中声明了此行为,但无效。行为仅在CoordinatorLayout的直接子项上声明时才起作用。您可以在此帖Intercepting everything with CoordinatorLayout Behaviors中详细了解详情。

答案 1 :(得分:1)

AppBarLayout ScrollView中所述设置您的XML,包括更改NestedScrollView ScrollView。我的理解是CoordinatorLayout不适用于private void standardRead() { BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream(new File(image_path))); } catch (FileNotFoundException e) { e.printStackTrace(); } System.out.println("Is mark supported? "+bis.markSupported()); try { for(int i=0;i<20;i++) { readingImage(bis,i); TimeUnit.MILLISECONDS.sleep(250); } } catch (IOException | InterruptedException e) { e.printStackTrace(); } }

答案 2 :(得分:0)

问题似乎出现在@layout/activity_deal_creation中 - 您可能会在FrameLayout或其他将Toolbar放在滚动视图顶部的容器中包含此视图。你需要在那里更改它以使你的ScrollView 在Y轴下方工具栏