아주 간단한 네이티브 Android UI 구성 요소를 구축했으며 반응하는 네이티브 프로젝트의 단추를 클릭 할 때 하위 뷰의 크기를 업데이트하려고합니다. 더 정확히 말하면,이 버튼을 클릭하면 내 SimpleViewManager
에 명령을 보내고, 다시 내 사용자 정의보기의 resizeLayout()
을 호출합니다.React Native : 사용자 지정 UI 구성 요소 크기 조정
resizeLayout()
이 제대로 호출되었지만 전화를 돌릴 때까지 레이아웃이 으로 변경되지 않았는지 확인할 수 있습니다. 분명히 장치의 방향을 변경하면 draw()
이 내 사용자 정의보기로 표시되지만 암시 적으로 호출하는 invalidate()
도 마찬가지입니다.
크기 조정 대신 배경색을 변경하는 등 레이아웃을 변경하면 문제가 없습니다.
public class CustomComponent extends RelativeLayout {
public CustomComponent(Context context) {
super(context);
init();
}
public CustomComponent(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomComponent(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
inflate(getContext(), R.layout.simple_layout, this);
}
public void resizeLayout(){
LinearLayout childLayout = (LinearLayout) findViewById(R.id.child_layout);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) childLayout.getLayoutParams();
layoutParams.height = 50;
layoutParams.width= 50;
childLayout.setLayoutParams(layoutParams);
invalidate();
}
}
을하고 simple_layout.xml은 다음과 같습니다 :
내 사용자 지정 구성 요소는 다음과 같습니다
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/child_layout"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="#ffee11"/>
</RelativeLayout>
어떤 도움을 주시면 감사하겠습니다.
감사합니다. 계층에서 업데이트되지 않는 custom-added-using-java 뷰의 문제를 해결할 수 있도록 도와주었습니다. (위의 메소드 오버라이드를 사용하여 컨테이너에 사용자 정의 뷰를 놓습니다.) – Venryx
사실, 제 경우에는 분명히 한 가지 더 나아가 야합니다. 위의 컨테이너 뷰 (RelativeLayout에서 상속받은)를 추가 한 후''container.layout (0, 0, 너비, 높이);'''. – Venryx
ReactNative 앱의 requestLayout이별로 유용하지 않기 때문에이 라이브러리가 폭넓게 도움이되었습니다. 라이브러리의 너비는 0, 높이 : 0입니다. 현상금 추가하기. –