我遇到了getLeft()和getTop()的问题,它返回0.我在Stackoverflow上看到我应该使用GlobaleLayoutListener但仍然不能正常工作。
我的观点是这样的。有一个第一个水平滚动视图栏,让用户选择用户想要查看其图表的时间段。当他选择“每周”或“每月”时,第二个栏会出现。用户可以选择一个月或一天。所以在开始的时候,第二个酒吧的能见度已经消失了。
我想设置第二个栏的项目。因为就像今天我们九月一样,如果用户点击每月,我希望第二个栏的第一个项目是9月。
我试过了:
ViewTreeObserver observer = decButton.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
System.out.println("KIRBY " + decButton.getLeft());
//in here, place the code that requires you to know the dimensions.
//Place your code here
}
});
但它不起作用:/
有我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</RelativeLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/quickViewConsumptionToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/wb_color"
android:titleTextColor="@color/white"
android:theme="@style/toolbar_white"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/hello">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/test">
<HorizontalScrollView
android:id="@+id/horizontalBar"
android:layout_width="match_parent"
android:layout_height="100px">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/dailyButton"
android:text="Daily"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/weeklyButton"
android:text="Weekly"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:id="@+id/monthlyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5px"
android:background="@android:color/transparent"
android:text="Monthly"
android:textAllCaps="false"
android:textStyle="normal" />
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/yearlyButton"
android:text="Yearly"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/allTimeButton"
android:text="All time"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
</LinearLayout>
</HorizontalScrollView>
<View
android:id="@+id/divider"
android:layout_width="100dp"
android:layout_marginLeft="140dp"
android:layout_marginRight="20dp"
android:layout_height="1dp"
android:background="@android:color/black"
android:layout_below="@+id/horizontalBar"
android:visibility="visible"
android:layout_marginBottom="5px"/>
<HorizontalScrollView
android:id="@+id/horizontalMonthlyBarBellow"
android:layout_width="match_parent"
android:layout_height="100px"
android:layout_below="@+id/divider"
android:layout_alignParentStart="true"
android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/janButton"
android:text="January"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/febButton"
android:text="February"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:id="@+id/marchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5px"
android:background="@android:color/transparent"
android:text="March"
android:textAllCaps="false"
android:textStyle="normal" />
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/aprilButton"
android:text="April"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mayButton"
android:text="May"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/juneButton"
android:text="June"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/julyButton"
android:text="July"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/augButton"
android:text="August"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/septView"
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sepButton"
android:text="September"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/octButton"
android:text="October"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/novButton"
android:text="November"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/decButton"
android:text="December"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
</LinearLayout>
</HorizontalScrollView>
<HorizontalScrollView
android:id="@+id/horizontalBarWeeklyBellow"
android:layout_width="match_parent"
android:layout_height="100px"
android:layout_below="@+id/divider"
android:layout_alignParentStart="true"
android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mondayButton"
android:text="Monday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tuesdayButton"
android:text="Tuesday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:id="@+id/wednesdayButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5px"
android:background="@android:color/transparent"
android:text="Wednesday"
android:textAllCaps="false"
android:textStyle="normal" />
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/thursdayButton"
android:text="Thursday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fridayButton"
android:text="Friday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/saturdayButton"
android:text="Saturday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sundayButton"
android:text="Sunday"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
<WebView
android:id="@+id/web_view_wb_quick_view_consumption"
android:layout_width="match_parent"
android:layout_height="400px"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_below="@id/test"
/>
</RelativeLayout>
答案 0 :(得分:2)
从View
documentation,讨论检索位置的方法:
这些方法都返回视图相对于其父级的位置。例如,当
getLeft()
返回20时,这意味着视图位于其直接父级左边缘右侧20像素处。
OnGlobalLayoutListener
技术&#34;不工作的原因&#34;对于你而言,decButton
被RelativeLayout
包裹在RelativeLayout
的左上角没有间距(边距/填充)。
<RelativeLayout
android:layout_width="90dp"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/decButton"
android:text="December"
android:textAllCaps="false"
android:textStyle="normal"
android:layout_marginRight="5px"
android:background="@android:color/transparent"/>
</RelativeLayout>
要获得Button
在窗口中的绝对位置,请在OnGlobalLayoutListener
中使用此代码:
int[] coords = new int[2];
decButton.getLocationInWindow(coords);
int absoluteX = coords[0];
int absoluteY = coords[1];
答案 1 :(得分:1)
这可能是因为在测量视图之前调用了方法。我不知道GlobalLayoutListener
是如何运作的。相反,您可以尝试使用以下代码,以便在没有其他工作的情况下使其正常工作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
decButton.getLeft() // This method will run after 200ms.
}
}, 200);
答案 2 :(得分:1)
这是因为查询视图的X位置时视图可能没有膨胀。你可以尝试这样的事情。
decButton.post(new Runnable(){
public void run(){
float leftX = decButton.getLeft();
float topY = decButoon.getTop();
System.out.println(leftX + " " + topY);
}
});
此外,如果您在视图或其任何方兴未艾的父母离开时尝试获取视图的位置,您将获得0。