gpt4 book ai didi

android - 以编程方式设置 SlidingUpPanelLayout 的面板高度

转载 作者:行者123 更新时间:2023-11-30 02:13:11 26 4
gpt4 key购买 nike

我已经在我的应用中实现了 SlidingUpPanelLayout 并且运行良好。现在我想在创建 Activity 后动态设置面板高度 现在我正在我的 xml 中这样做

<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp"
sothree:umanoParalaxOffset="100dp"
sothree:umanoDragView="@+id/dragView"
sothree:umanoOverlay="true">

<!-- MAIN CONTENT -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="true"
android:textSize="16sp" />
</FrameLayout>

<!-- SLIDING LAYOUT -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
android:clickable="true"
android:focusable="false"
android:id="@+id/dragView">

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

<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="14sp"
android:gravity="center_vertical"
android:paddingLeft="10dp"/>

<Button
android:id="@+id/follow"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="14sp"
android:gravity="center_vertical|right"
android:paddingRight="10dp"
android:paddingLeft="10dp"/>

</LinearLayout>

<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scaleType="fitStart"
android:src="@drawable/graphic" >
</ImageView>
</LinearLayout>
</com.sothree.slidinguppanel.SlidingUpPanelLayout>

这很好用,但我想在 onCreate

的代码中设置
 mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
mLayout.setPanelSlideListener(new PanelSlideListener() {

@Override
public void onPanelSlide(View panel, float slideOffset) {

Log.i(TAG, "onPanelSlide, offset " + slideOffset);
}

@Override
public void onPanelExpanded(View panel) {

Log.i(TAG, "onPanelExpanded");
}

@Override
public void onPanelCollapsed(View panel) {

Log.i(TAG, "onPanelCollapsed");
}

@Override
public void onPanelAnchored(View panel) {

Log.i(TAG, "onPanelAnchored");
}

@Override
public void onPanelHidden(View panel) {

Log.i(TAG, "onPanelHidden");
}
});
mLayout.setPanelHeight(Utils.getPixels(80, getResources()));

但是在这样做的时候我遇到了崩溃

04-23 20:09:24.010: E/AndroidRuntime(13344): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getLeft()' 在一个空对象引用

由于 mSlideableView 在 SlidingUpPanelLayout.java 的 smoothSlideTo 方法中为 null。

提前致谢。

最佳答案

发生这种情况是因为您没有给布局足够的时间来自行膨胀。我在同一个图书馆发生了同样的事情,我试过这个:

final int someWaitInterval = 20;
Runnable r = new Runnable() {

@Override
public void run() {
try {
mLayout.setPanelHeight(params.height);
} catch (Exception e2) {
new Handler().postDelayed(this, someWaitInterval);
}
}};
new Handler().postDelayed(r, someWaitInterval);

这样它会调用自己直到它真正改变面板高度。

关于android - 以编程方式设置 SlidingUpPanelLayout 的面板高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com