Я пытаюсь реализовать панель в фрагменте, который может расширяться при нажатии кнопки с правой стороны экрана. Я не могу использовать навигационный ящик, потому что у меня уже есть навигационные ящики как с левой, так и с правой стороны.Как сдвинуть LinearLayout при расширении SlidingDrawer?
Идея заключается в том, чтобы добиться чего-то вроде этого:
я был почти в состоянии сделать это с SlidingDrawer
виджета (это не рекомендуется ..), единственная проблема в том, что я не знаю как заставить LinearLayout появляться в середине, а затем сдвигаться, когда нажата кнопка для расширения SlidingDrawer
.
У меня есть следующий код:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button handle = (Button) findViewById(R.id.handle);
SlidingDrawer drawer = (SlidingDrawer) findViewById(R.id.slidingDrawer);
drawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
@Override
public void onDrawerOpened() {
}
});
drawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
}
});
}
}
И в XML
код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="com.test.slidingdrawertest.slidingdrawertest.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST TEST TEST" />
</LinearLayout>
<LinearLayout
android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<SlidingDrawer
android:id="@+id/slidingDrawer"
android:layout_width="200dp"
android:layout_height="400dp"
android:layout_marginTop="100dp"
android:layout_gravity="end"
android:content="@+id/content"
android:handle="@+id/handle"
android:orientation="horizontal">
<Button
android:id="@+id/handle"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Expand" />
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST TEST TEST" />
</LinearLayout>
</SlidingDrawer>
</LinearLayout>
</RelativeLayout>
Ваш LinearLayout должен идти влево, а затем становиться меньше, когда другой приближается к нему? Как сжатый между вашей расширенной панелью и левым пределом – king
@Tritri Да, это так. Я пытаюсь изменить гравитацию «LinearLayout», но безуспешно. На данный момент я получаю «java.lang.ClassCastException: android.widget.RelativeLayout $ LayoutParams не может быть отброшен в android.widget.LinearLayout $ Исключение LayoutParams', когда я пытаюсь получить« LinearLayout »и изменять параметры. – Apostrofix
I подумайте об этой ошибке, потому что ваш LinearLayout зависит от RelativeLayout так: 'RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 'И гравитация, которую вы установили, предназначена для textView, а не для самого линейногоLayout, а layout_gravity будет работать, если вы будете в LinearLayout. Но даже с этим я не могу, если бы он мог работать. Я бы сделал что-то еще с кодом. – king