gpt4 book ai didi

android - 在不使用完全限定类名的情况下使用 XML 中的自定义 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:42 26 4
gpt4 key购买 nike

对于定义为主题的按钮,我有自己的样式,但我也使用自己的类来处理按钮(因为有自己的字体)。是否可以用一个漂亮的名字来调用我的按钮,例如

<MyButton>

代替

<com.wehavelongdomainname.android.ui.MyButton>

最佳答案

因此,令人惊讶的是,答案是"is"。我最近了解到这一点,它实际上是您可以做的事情,可以使您的自定义 View 膨胀更有效率。 IntelliJ 仍然警告您它无效(尽管它会编译并成功运行)——我不确定 Eclipse 是否警告您。

无论如何,您需要做的是定义您自己的 LayoutInflater.Factory 子类:

public class CustomViewFactory implements LayoutInflater.Factory {
private static CustomViewFactory mInstance;

public static CustomViewFactory getInstance () {
if (mInstance == null) {
mInstance = new CustomViewFactory();
}

return mInstance;
}

private CustomViewFactory () {}

@Override
public View onCreateView (String name, Context context, AttributeSet attrs) {
//Check if it's one of our custom classes, if so, return one using
//the Context/AttributeSet constructor
if (MyCustomView.class.getSimpleName().equals(name)) {
return new MyCustomView(context, attrs);
}

//Not one of ours; let the system handle it
return null;
}
}

然后,在任何 Activity 或上下文中,您要在其中扩充包含这些自定义 View 的布局,您需要将工厂分配给该上下文的 LayoutInflater:

public class CustomViewActivity extends Activity {
public void onCreate (Bundle savedInstanceState) {
//Get the LayoutInflater for this Activity context
//and set the Factory to be our custom view factory
LayoutInflater.from(this).setFactory(CustomViewFactory.getInstance());

super.onCreate(savedInstanceState);
setContentView(R.layout.layout_with_custom_view);
}
}

然后您可以在 XML 中使用简单的类名:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<MyCustomView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="center_vertical" />

</FrameLayout>

关于android - 在不使用完全限定类名的情况下使用 XML 中的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com