代码之家  ›  专栏  ›  技术社区  ›  Heinzlmaen

Android:如何访问库项目中自定义FrameLayout的子元素

  •  0
  • Heinzlmaen  · 技术社区  · 5 年前

    我正在扩展一个“地图视图”,它本身扩展了FrameLayout。但我无法访问我添加的ui元素: 和*水平滚动。我可以将代码直接添加到MainActivity中,但我无法使它在库中工作。

    <?xml version="1.0" encoding="utf-8"?>
    <android.company.com.library.mapbox.MyMapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mapView">
    
            <ScrollView
                android:id="@+id/level_scroll"
                android:layout_width="50dp"
                android:layout_height="250dp"
                android:layout_gravity="right"
                android:layout_marginTop="100dp"
                android:orientation="vertical">
    
                <LinearLayout
                    android:id="@+id/level_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"></LinearLayout>
            </ScrollView>
    </android.company.com.library.mapbox.MyMapView>
    

    MyMapView.java文件

    int level = R.id.level_layout;
    

    但是 线性的 尝试获取 线性布局

    LinearLayout linear = (LinearLayout) findViewById(R.id.level_layout);
    

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
    }
    

    (我尝试在调用后访问我的ui元素)

    LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService
            (Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.nameOfTheXmlFile, null);
    

    我没有多个同名的布局文件。

    我不能用 既然这是一个视图而不是一个活动?

    0 回复  |  直到 5 年前
        1
  •  3
  •   Pavlo Ostasha    5 年前

    正式文件 MapView here 明确地说

    注意:建议不要将子级添加到此视图中。

    地图视图 有了它复杂的触摸监听器和广泛的内部用户界面-你可以很容易地打破一些东西(例如变焦或相机刷卡与您的手机) ScrollView

    坦率地说,我不知道你为什么要这样做-你可以很容易地把所有的意见,你需要在普通的地方 FrameLayout 一切都会好的(除了 卷轴视图 刷卡手势处理器可能会中断 (手势)

    <FrameLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
            <android.company.com.library.mapbox.MyMapView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/mapView"/>
    
            <FrameLayout
                android:id="@+id/wrapper_layout"
                android:layout_width="50dp"
                android:layout_height="250dp"
                android:layout_gravity="right"
                android:layout_marginTop="100dp">
    
                <ScrollView
                    android:id="@+id/level_scroll"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical">
    
                    <LinearLayout
                        android:id="@+id/level_layout"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical">
                    </LinearLayout>
    
                </ScrollView>
    
            </FrameLayout>
    
    </FrameLayout>
    

    这样你就可以充分利用 地图视图 在这里

    你可能也注意到我 具有 框架布局 并给出了包装纸的高度和重量 卷轴视图 match_parent . 我这么做是因为 卷轴视图

    虽然这不是你问题的确切解决办法,但我希望这个答案能对你有所帮助。