저는 Android에 익숙하지 않아 몇 주 동안 앱을 만들고 있습니다.android -보기가 "GONE"으로 설정되면 그 아래보기가 보이지 않게됩니다.
제목에서 말하듯이 문제는 프로그래밍 방식으로 Spinner
을 GONE으로 설정하려고 할 때 이 그 아래에있는 경우 RelativeLayout
도 사라졌습니다. 여기
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/tableSelector"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/insertList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tableSelector"
android:layout_above="@+id/saveButton"
android:background="#aaffffff"
android:divider="#11000000"
android:dividerHeight="4dp"
android:visibility="gone" >
</ListView>
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="@string/button_save"
android:visibility="visible" />
</RelativeLayout>
그리고 여기가 프로그래밍 방식으로 설정하는 방법입니다
switch(spinnerFlag)
{
case SPINNER_HIDDEN: tableSelector.setVisibility(View.GONE); break;
case SPINNER_VISIBLE: tableSelector.setVisibility(View.VISIBLE); break;
case SPINNER_VISIBLE_DISABLED: tableSelector.setVisibility(View.VISIBLE);
tableSelector.setEnabled(false);
break;
default: Log.d("onActivityCreated - InserFragment", "Spinner flag < " + spinnerFlag + " > does not exist. Spinner is now visible enabled.");
}
또한 SPINNER_HIDDEN
ListView
로 설정하면이 경우 SPINNER_VISIBLE
및 SPINNER_VISIBLE_DISABLED
을 위해 잘 작동하지만 사라진다. 싸이 오리와 응우 엔 도안 퉁으로
업데이트] 내가 ListView
에 layout_alignWithParentIfMissing
속성을 추가 제안했다. 그러나 나는 그것이 아직도 작동하지 않았다는 것을 알아 차렸다. xml에 ListView
의 표시 여부를 visible
으로 설정했는데 표시되지만 비어 있습니다. 그래서 문제가 해결되었지만 ListView가 비어있는 또 다른 문제가 생겼습니다. ((spinnerFlag == SPINNER_VISIBLE || spinnerFlag == SPINNER_VISIBLE_DISABLED)
일 때 다시 언급하겠습니다.)
여기 내 코드의 상당 부분이 있습니다 :
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
insertList = (ListView) getActivity().findViewById(R.id.insertList);
/* Some code */
tableSelector = (Spinner) getActivity().findViewById(R.id.tableSelector);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item,tables);
tableSelector.setAdapter(adapter);
tableSelector.setOnItemSelectedListener(new OnItemSelectedListener() {
/* Some code containing some Log.d() */
});
/* Some code */
Log.d("Insert fragment", "Setting table selected by position in list " + pos + ", " + tName);
tableSelector.setSelection(pos); // pos is calculated correctly in the code i didn't show
switch(spinnerFlag)
{
case SPINNER_HIDDEN: tableSelector.setVisibility(View.GONE); break;
case SPINNER_VISIBLE: tableSelector.setVisibility(View.VISIBLE); break;
case SPINNER_VISIBLE_DISABLED: tableSelector.setVisibility(View.VISIBLE);
tableSelector.setEnabled(false);
break;
default: Log.d("onActivityCreated - InserFragment", "Spinner flag < " + spinnerFlag + " > does not exist. Spinner is now visible enabled.");
}
}
tableSelector.setSelection(pos)
전에 Log
가 로그 캣에 표시되어 있지만 tableSelector.onItemSelected();
에서 Logs
중 어느 것도 표시되지 않습니다, 그래서 setSelection이 그것을 호출하지 않습니다. 그 이유는 무엇일까요? (나는 View
을 GONE으로 설정하면 기능이 멈추는 것을 생각했지만, GONE으로 설정하기 전에 setSelection()
라고 부름)
고마워!
FIXED 대신은 :
tableSelector.setVisibility(View.GONE); break;
나는 해결 방법 사용 :
tableSelector.setVisibility(View.VISIBLE);
tableSelector.setEnabled(false);
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) tableSelector.getLayoutParams();
params.height = 0;
tableSelector.setLayoutParams(params);
break;
을 그리고 내가 그것을 필요가 작동합니다.
보기를 GONE으로 설정하면 레이아웃에서 아무런 공간도 차지하지 않습니다.ListView는이 attr'android : layout_below = "@ + id/tableSelector"를 가지고 있습니다. 그러면 Spinner가 그 아래에 ListView를 설정합니다. –