내 기본 레이아웃 main.xml 에는 두 개의 LinearLayouts가 있습니다.
- 첫 번째
LinearLayout
호스트 aVideoView
및 aButton
, - 제 2 회
LinearLayout
호스트하는이EditText
, 이것은LinearLayout
설정된했다 가시성 에 값을 ” GONE (”android:visibility="gone"
)
아래와 같이 :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/first_ll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<VideoView
android:id="@+id/my_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="9"
/>
<Button
android:id="@+id/my_btn"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_gravity="right|bottom"
android:layout_weight="1"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/second_ll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="2dip"
android:visibility="gone"
>
<EditText
android:id="@+id/edit_text_field"
android:layout_height="40dip"
android:layout_width="fill_parent"
android:layout_weight="5"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
</LinearLayout>
Button
(id my_btn)을 누르면 다음 Java 코드와 함께 두 번째 LinearLayout
with EditText
필드가 표시 되는 기능을 성공적으로 구현했습니다 .
LinearLayout secondLL = (LinearLayout) findViewById(R.id.second_ll);
Button myBtn = (Button) findViewById(R.id.my_btn);
myBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
int visibility = secondLL.getVisibility();
if(visibility==View.GONE)
secondLL.setVisibility(View.VISIBLE);
}
});
위의 Java 코드를 사용하면 2nd LinearLayout
with EditText
가 1st 아래 에 추가되는 것처럼 표시 됩니다. LinearLayout
하지만 , 내가해야 할 것은 다음과 같은 경우 Button
(ID :에서는 my_btn)을 누를 때 두번째 LinearLayout
와 EditText
의 상단에 표시됩니다 1 일 LinearLayout
, 등이 보이는 2 LinearLayout
와 EditText
화면 하단에서 상승하고, 둘째 LinearLayout
로 EditText
단지는 부분을 차지 아래 이미지와 같이 여전히 보이는 첫 번째 LinearLayout입니다.
그래서, Button
(ID : my_btn이가)를 누르면 어떻게 보여 둘째 LinearLayout
와 EditText
의 상단에 1 LinearLayout
대신 추가 2 위를 LinearLayout
아래의 첫번째 LinearLayout
프로그램을?
답변
두 자녀가있는 FrameLayout을 사용합니다. 두 자녀가 겹쳐집니다. 이것은 실제로 Android의 자습서 중 하나에서 권장되며 해킹이 아닙니다 …
다음은 ImageView 위에 TextView가 표시되는 예입니다.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
android:src="@drawable/golden_gate" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_gravity="center_horizontal|bottom"
android:padding="12dip"
android:background="#AA000000"
android:textColor="#ffffffff"
android:text="Golden Gate" />
</FrameLayout>
답변
Alexandru가 제공 한 대답은 꽤 잘 작동합니다. 그가 말했듯이이 “접근 자”뷰가 마지막 요소로 추가되는 것이 중요합니다. 다음은 나를 위해 트릭을 수행 한 코드입니다.
...
...
</LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
<!-- place a FrameLayout (match_parent) as the last child -->
<FrameLayout
android:id="@+id/icon_frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</TabHost>
자바 :
final MaterialDialog materialDialog = (MaterialDialog) dialogInterface;
FrameLayout frameLayout = (FrameLayout) materialDialog
.findViewById(R.id.icon_frame_container);
frameLayout.setOnTouchListener(
new OnSwipeTouchListener(ShowCardActivity.this) {
답변
FrameLayout
이 작업을 수행하는 더 좋은 방법은 아닙니다.
RelativeLayout
대신 사용하십시오 . 원하는 위치에 요소를 배치 할 수 있습니다. 그 뒤에 오는 요소는 이전 요소보다 Z- 색인이 더 높습니다 (즉, 이전 요소보다 큼).
예:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
app:srcCompat="@drawable/ic_information"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a text."
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_margin="8dp"
android:padding="5dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:background="#A000"
android:textColor="@android:color/white"/>
</RelativeLayout>