Android 在片段中使用自定义视图改变方向时的奇怪行为

2024-02-26

我有一个FragmentActivity其中显示了一个Fragment默认情况下。该片段由一个EditText, a TextView和一个自定义下拉菜单,通过扩展AutoCompleteTextView。 如果我的习惯AutoCompleteTextView已获得焦点或下拉列表已打开,并且我更改了设备的方向。我收到以下异常:

查找窗口失败
java.lang.IllegalArgumentException:请求的窗口 null 不存在

如果自定义的话它可以工作AutoCompleteTextView未处于聚焦状态。 我尝试过将焦点移开onSaveInstanceState()通过使其他布局获得焦点requestFocus()我在网上搜索了两天多,似乎没有人遇到过这样的问题自定义视图在碎片和方向变化的背景下。

这是我的 FragmentActivity:

public class Balance_Inquiry extends FragmentActivity implements OnTouchListener, EventCallbackListener, DataCallBack,CustomResultReceiver.Receiver  {

LinearLayout balInquiryLayout;
FragmentTransaction fragmentTransaction;
FragmentManager fm;
Fragment fr;

//SQLiteDatabase sql;
//ConDb db;

public final static int ACTIVITY_ID = 2;
private Bundle orientationData;



protected void onCreate(Bundle savedInstanceState){

    try{
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    int screenWidth = (int) (metrics.widthPixels * 0.90);

    setContentView(R.layout.common_blank_dialog);
    //Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
    Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(App.context()));

    getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT);

    balInquiryLayout = (LinearLayout) findViewById(R.id.dialogtoplayout);
    orientationData = savedInstanceState;
    if(savedInstanceState == null){
        fr = new Balance_Main_Fragment();
         fm = getSupportFragmentManager();
         fragmentTransaction = fm.beginTransaction();
         fragmentTransaction.setCustomAnimations(R.anim.zoom_enter, R.anim.zoom_exit);
         fragmentTransaction.add(R.id.dialogtoplayout, fr,"tag1");
         fragmentTransaction.commit();
    }
    else{
         fr = getSupportFragmentManager().findFragmentByTag("tag1");
    }


    balInquiryLayout.setOnTouchListener(this);
    }
    catch(Exception e){
        e.printStackTrace();
    }

}

@Override
public boolean onTouch(View v, MotionEvent event) {

    balInquiryLayout.requestFocus();
    DisableKeyboard.hideKB(v, getApplicationContext());
    return false;
}




private AccountBean ab_;
private ValuesBean resp_;




public void show_result(){
    try{
      fr = new Balance_Result_Fragment();
         fm = getSupportFragmentManager();
         fragmentTransaction = fm.beginTransaction();
         fragmentTransaction.setCustomAnimations(R.anim.zoom_enter, R.anim.zoom_exit);
         fragmentTransaction.add(R.id.dialogtoplayout, fr, "tag2");
         fragmentTransaction.commit();
    }

    catch(Exception e){
        e.printStackTrace();
    }
}


public void hideResult(){


      fr = new Balance_Result_Fragment();
         fm = getSupportFragmentManager();
    fragmentTransaction = fm.beginTransaction();
    fragmentTransaction.setCustomAnimations(R.anim.zoom_exit,R.anim.zoom_enter);
    fragmentTransaction.remove(fr).commit();


    //new Balance_Main_Fragment().clearAll();

}



@Override
public void onButtonClicked(int a) {


    switch(a){

            case 0:
                {


                    hideResult();

                    try{


                          fm = getSupportFragmentManager();
                          Balance_Main_Fragment fre=(Balance_Main_Fragment)getSupportFragmentManager().findFragmentByTag("tag1");
                             fre.clearAll();

                         fre.enableButtons();
                         }
                         catch(Exception e){
                             e.printStackTrace();
                         }

                    break;
                }

            case 1:
            {
                show_result();
                break;
            }


    }

}







@Override
public void passData(String... a) {


}







@Override
public void passData(Object... a) {
    try{
     this.ab_=(AccountBean) a[0];
     this.resp_ = (ValuesBean) a[1];     
     }
    catch(ClassCastException e){
        e.printStackTrace();
    }


}







@Override
public Object[] getData() {
    // TODO Auto-generated method stub
    return new Object[]{this.ab_,this.resp_};
}

@Override
public void onBackPressed(){
    if(MainExpandActivity.backApprove== true){
        if(ParserMain.isMyServiceRunning(MessengerService.class, this)){
        NetworkThread.stopServiceNow(Balance_Inquiry.this);
        NetworkThread.unBindServicePlz(Balance_Inquiry.this);
        }
        super.onBackPressed();
    }
    else{
        // do nothing here hehehehe
    }

}

@Override
public void onReceiveResult(int resultCode, final Bundle resultData) {
    Log.e("activity", "activties onRecieveresul is called");
}

public void onDestroy(){
    //NetworkThread.unBindServicePlz(Balance_Inquiry.this);
    super.onDestroy();
    Log.e("onDestory()", "onDestory() is called");
    if(isFinishing()){
        NetworkThread.unBindServicePlz(this.getApplicationContext());
        NetworkThread.stopServiceNow(this.getApplicationContext());
        Log.e("onDestory()", "isFinishing() block");
    }

}

public void onWindowFocusChanged(boolean hasFocus) {

    super.onWindowFocusChanged(hasFocus);

  if(hasFocus) 
     Toast.makeText(Balance_Inquiry.this, "focus gained", Toast.LENGTH_LONG).show();

  else
      Toast.makeText(Balance_Inquiry.this, "focus lost", Toast.LENGTH_LONG).show();
}



public void onPause(){
    Log.e("onPause()", "pause called");
    balInquiryLayout.requestFocus();

    super.onPause();

    }

}

以下是我的 Fragment 类,仅发布其中的相关片段:

InstantAutoComplete accounts;  // custom View
LinearLayout balInq2ndLayout;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    setRetainInstance(true);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    main_view = inflater.inflate(R.layout.fragment_balance1, container,false);
    sub = (Button) main_view.findViewById(R.id.sub_bal);

    cancel = (Button) main_view.findViewById(R.id.cancel_bal);

    accounts = (InstantAutoComplete) main_view.findViewById(R.id.bal_accounts);

    mHat = new Handler();
    balInq2ndLayout = (LinearLayout) main_view.findViewById(R.id.balInq2ndLayout);
    balInq2ndLayout_2 = (LinearLayout) main_view.findViewById(R.id.balInq2ndLayout_2);


    macBalance = (TextView) main_view.findViewById(R.id.macbal_balinq);

    macBalance.setText(SessionInfo.getBalanceString()+SessionInfo.getMacBalance());
    bal_prog = (TextView) main_view.findViewById(R.id.bal_status);

    pb = (ProgressBar) main_view.findViewById(R.id.progressBarBalance);
    pb.setVisibility(View.GONE);
    balInq2ndLayout.requestFocus();
    balInq2ndLayout.setOnTouchListener(this);
    balInq2ndLayout_2.setOnTouchListener(this);

    pin_no = (EditText) main_view.findViewById(R.id.bal_pin);

    bal_accountLocked = (EditText) main_view.findViewById(R.id.bal_accountlocked);

    bal_accountLocked.setEnabled(false);
    bal_accountLocked.setFocusable(false);
    bal_accountLocked.setVisibility(View.GONE);


    myData = new Bundle();

    if(savedInstanceState==null){

    bal_accountLocked.setVisibility(View.GONE);


    }
    else{

        pin_no.setText(savedInstanceState.getString("pin"));

        if(savedInstanceState.getBoolean("key")){
            bal_accountLocked.setVisibility(View.VISIBLE);
            bal_accountLocked.setText(savedInstanceState.getString("locked"));
        }


        if(accounts.getText().toString().length()!=0){
            ab = savedInstanceState.getParcelable("ab");
        }

        if(savedInstanceState.getBoolean("progress")){

            pb.setVisibility(View.VISIBLE);
            disableButtons();
        }

        accounts.setText(savedInstanceState.getString("account"));

    }




    Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(App.context()));

    final ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.select_dialog_item, ObjectsHolder.ab);
    accounts.setAdapter(adapter);

    accounts.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus){
                if(accounts.getText().length()==0){
                //Toast.makeText(getActivity(), "focus lost", Toast.LENGTH_LONG).show();
                accounts.setText(saved1);
                DisableKeyboard.disableSoftInputFromAppearing(accounts, getActivity());

                    }
                }
            else if(hasFocus){
                DisableKeyboard.disableSoftInputFromAppearing(accounts, getActivity());
            }

        }
    });

    accounts.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            DisableKeyboard.disableSoftInputFromAppearing(accounts, getActivity());
            saved1=DisableKeyboard.showAll(accounts);
            if(accounts.getText().toString().length()==0){
                bal_accountLocked.setText("");
                bal_accountLocked.setVisibility(View.GONE);
            }
            return false;
        }
    });



    accounts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id){
                Log.e("inside setOnItemSelectedListener", "this is called normally");
                //Toast.makeText(arg0.getContext(), "On item click: "+arg0.getItemAtPosition(arg2), 1).show();
                ab= (AccountBean) adapter.getItem(position);

                //ab = (AccountBean) arg0.getItemAtPosition(arg2);
                if(ab==null){
                    Log.e("ab object", "is null :(");
                }
                else{
                    bal_accountLocked.setVisibility(View.VISIBLE);
                    bal_accountLocked.setText(ab.getAccountNumber());
                }
                //saved1 = (String) arg0.getItemAtPosition(arg2);
    }

    });

    return main_view;

}

@Override
public boolean onTouch(View v, MotionEvent event) {
    balInq2ndLayout.requestFocus();
    DisableKeyboard.hideKB(v, getActivity());
    return false;
}


    public void onSaveInstanceState(Bundle state){
      super.onSaveInstanceState(state);
      Log.e("onSaved", "onSaved is  called");
      balInq2ndLayout.requestFocus(); // setting request here to LinearLayout
      if(bal_accountLocked.isShown()){
      state.putString("locked", bal_accountLocked.getText().toString());
      state.putBoolean("key", true);
      }
      if(ab!=null){
        state.putParcelable("ab", ab);
      }
      state.putString("pin", pin_no.getText().toString());

      if(pb.getVisibility() == View.VISIBLE){
        state.putBoolean("progress", true);
        state.putBoolean("back", true);
      }

      if(accounts.getText().toString().length()!=0){
        state.putString("account", accounts.getText().toString());
      }

  }

最后这是我的自定义 AutoCompleteTextView

import android.content.Context;  
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;


public class InstantAutoComplete extends AutoCompleteTextView {
String savedTexti2;

public InstantAutoComplete(Context context) {
    super(context);
}

public InstantAutoComplete(Context arg0, AttributeSet arg1) {
    super(arg0, arg1);
}

public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) {
    super(arg0, arg1, arg2);
}

@Override
public boolean enoughToFilter() {
    return true;
}

@Override
protected void onFocusChanged(boolean focused, int direction,
        Rect previouslyFocusedRect) {
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
    if (focused) {
        performFiltering(getText(), 0);
        showAll();
    }
    else{
        //Toast.makeText(getContext(), "works", 10).show();
        //restore();
    }

}


public void restore() {
    this.setText(savedTexti2);
}

public void showAll() {
    savedTexti2 = this.getText().toString();
    this.setText("");
    this.showDropDown();
    }





}

这是完整的 StackTrace:

查找窗口失败
java.lang.IllegalArgumentException:请求的窗口 null 不存在 在 com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:9293) 在 com.android.server.WindowManagerService.addWindow(WindowManagerService.java:1891) 在 com.android.server.WindowManagerService$Session.add(WindowManagerService.java:6771) 在 android.view.IWindowSession$Stub.onTransact(IWindowSession.java:66) 在 com.android.server.WindowManagerService$Session.onTransact(WindowManagerService.java:6743)
在 android.os.Binder.execTransact(Binder.java:288) 在dalvik.system.NativeStart.run(本机方法) 尝试添加带有非窗口标记的窗口:null。正在流产。

我尝试了很多不同的方法,例如从 AutoCompleteTextView 中移除焦点、切换焦点......但似乎没有任何效果。如果有人能帮助我,我将不胜感激,因为我已经访问了 stackoverflow 的每个角落,但没有运气。如果有人遇到过这个问题并成功解决了,请这里的兄弟帮忙。

--EDIT--

这个问题是在API 8的模拟器中产生的

在 JellyBean API 17 的模拟器上进行了测试,效果很好。没有例外。我想知道它是否只与较低的 API 有关。必须一一检查。叹


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 在片段中使用自定义视图改变方向时的奇怪行为 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • PrimeFaces 对话框参考父级

    我有一个 xhtml 页面 显示带有条目的数据表 我还有一个用于插入新条目的按钮 该按钮显示一个包含表单的对话框 插入表格用作
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 无法读取架构文档'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

    我正在为大学编写一个简单的 Swing 应用程序 并使用 Hibernate 和 Oracle XE 我被这个错误困住了 29 06 2011 14 54 10 org hibernate cfg annotations Version
  • 放大图像映射的某个区域

    我目前正在尝试制作一个响应式图像地图 我们还可以在其中缩放特定区域 目前我有类似的东西 插图 例如 我有 3 个部分用于 3 个不同的区域 但现在我不想在用户单击特定区域时放大该区域 我已经尝试了一些 jquery 脚本 但问题是它会缩放所
  • 如何隐藏Android手机上的软键栏?

    当我的应用程序启动时 我想隐藏软键栏 红色矩形 以获得更大的屏幕 我怎样才能隐藏它 当应用程序退出时 我是否需要特意显示该栏 或者应用程序退出后它会自动恢复 Android 4 1 手机正面没有硬件按键 我知道已经晚了 但这是正确的答案 所
  • 如何在 Spring Tools Suite 上添加 Spring roo

    我已经安装了 sts 但创建的新 roo 项目不存在 我需要做什么才能添加 spring roo 在以前的版本中我可以创建它 但在 3 5 0 中不行 在 Spring 工具套件中 单击仪表板中的 扩展 链接 搜索 Spring Roo 并
  • “known_hosts”文件中的 ECDSA 条目由哪些部分组成?

    我正在尝试从我的文件中提取 ECDSA 公钥已知主机归档该文件ssh用于验证主机 我下面有一个例子 这是我的known hosts 文件中 127 0 0 1 ecdsa sha2 nistp256 的条目 AAAAE2VjZHNhLXNo
  • Express 应用程序 - 更改基本 url

    我正在构建一个问答应用程序本教程 http engineering paiza io entry 2016 03 10 115345一切顺利 但我需要更改更改通过配置文件提供应用程序的基本根的机会 现在 该应用程序在 localhost 8
  • 使用 jquery 将表单值传递到 iframe 的 src url

    我一直让自己发疯去尝试做看似简单的事情 我有一张表格 我可以在其中询问邮政编码 在您输入邮政编码后 我使用 colorbox 弹出带有 iframe 的灯箱 我需要将表单中的邮政编码值传递到 iframe 的源 URL 中 我的表单代码如下
  • 下拉框显示的高度[重复]

    这个问题在这里已经有答案了 可能的重复 调整下拉框中列表的高度 https stackoverflow com questions 5600646 adjust the height of the list in dropdown box
  • std::set 2D 点的自定义比较器

    我需要一个非重复的 2D 点列表 所以我使用std set具有自定义比较功能 我使用的函数在插入点后出现问题 因为有时std find找不到已经插入的点 const double tolerance 0 1 struct MyPoint2D
  • 从Optional<>转换为ArrayList<>

    我有以下情况 public ArrayList a getMethods return b c test 所以 我的问题是b c test 返回一个值Optional a 作为返回类型 但我需要返回一个ArrayList a 所以 我尝试将
  • 完整原型太大而无法保存,已清除变量

    我在渲染谷歌应用程序引擎代码时遇到此错误 有人知道这个错误吗 你在使用appstats吗 当 appstats 记录有关应用程序的状态时 尤其是在堆栈上存储大量数据时 可能会发生这种情况 它没有害处 但在 appstats 中检查调用时您将
  • 如果焦点是 edittext,则禁止滚动 recyclerview

    我有一个带有水平滚动的回收器视图 recyclerview 中的每个项目都有编辑文本 当我单击 edittext 时 recyclerview 滚动到末尾 我怎样才能禁止滚动 谢谢 您可以在 EditText 上设置焦点事件侦听器以禁用焦点
  • 黑莓 - 应用程序已在商店上架;我可以更改代码签名密钥吗

    不久前 我们为客户构建了一个应用程序 使用我们公司的密钥对其进行签名 并将其放在 BlackBerry App World 商店中 此后我们终止了与客户的合同 他们现在已经对该应用程序进行了进一步的 内部 开发 并要求我们提供签名密钥 以便
  • 如何从 Azure AD 获取用户列表?

    我正在使用 asp net core MVC 我想从 Azure AD 读取用户 我读了很多微软文档 我知道我必须使用 GraphAPI 来做到这一点 但我不知道如何做 现在一切都让我感到困惑 我不知道在哪里放置代码 我不知道在哪里获取 G
  • create-react-app eintegrity 错误窗口

    当我开始在 Windows 10 电脑中创建 React 应用程序时 出现了这些错误 请帮我解决这个问题 PS F gt npm install g create react app C Users Harshit Singh AppDat
  • R:调整圈图中的标签

    我有下面的代码 我试图使用令人惊叹的包 circlize 制作一个圆形图 我读过这个小插图并承认其中一些内容有点超出了我的理解范围 我想知道是否有一种快速方法可以删除图表上的所有标签 包括刻度线 然后按照与扇区相同的角度以浅灰色重新添加奥迪
  • 是否可以在 GDB 中命名断点?

    有没有办法在 GDB 中标记 命名断点 以便更容易地识别它们 例如 info b 如果是这样 怎么办 不 没有办法做到这一点 http users ece utexas edu adnan gdb refcard pdf http user
  • 删除 Spark 中不遵循架构的行

    目前 我的表的架构是 root product id integer nullable true product name string nullable true aisle id string nullable true departm
  • 如何创建和使用非常大的调色板纹理以在 opengl 中使用?

    详细信息 我有一个带有统一纹理的 glsl 片段着色器 u MapTexture 上面有几千种颜色 最多大约 10k 15k 唯一的 rgb 值 我还有一个统一的调色板纹理 u paletteTexture 大小为 16384 1 我想用它
  • Android 在片段中使用自定义视图改变方向时的奇怪行为

    我有一个FragmentActivity其中显示了一个Fragment默认情况下 该片段由一个EditText a TextView和一个自定义下拉菜单 通过扩展AutoCompleteTextView 如果我的习惯AutoComplete