知识点整理(三)易错记录
16lz
2021-01-25
易错总结~ 发现,其实它的request挺多的,以及错一点都会全局错,还是多记下来吧。 https://blog.csdn.net/qq_31490071/article/details/82384011再报错???看看这个咯!! here 1 :线性布局
android:orientation="vertical"/ horizontal 改变排布方式 android:layout_gravity="top"/ "center_vertical" / bottom 指定效果布满: 需要布满的: android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" 剩下那个就是: android:layout_width="wrap_content" android:layout_height="wrap_content" 这样,上面可以填满剩下的空间 记得一个0dp,一个大大的1!!!!
这里我们在res目录下新建一个drawable-xhdpi目录,然后将事先准备好的两张图片img_1.png和img_2.png复制到该目录当中。但是为啥新建了目录根本看不到? 【名字不能有- 只能数字字母或者 下划线!】 但是,这样做效率也太低了,这button仅仅是放了上去而已,想随屏滚动、想控制xx真是刀山火海啊。 所以搜了半天,发现一个文本编辑的span类 下面这样是可以的 但只能设置一个 int start =edit_passage.getSelectionStart(); int end = edit_passage.getSelectionEnd(); SpannableStringBuilder ssb = new SpannableStringBuilder(edit_passage.getText().toString()); ssb.setSpan(new UnderlineSpan(), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); edit_passage.setText(ssb); 修改样式的位置是[start,end) 和substring一样 是左闭 右开的 就是这个问题:只能用一次,之后设置,之前的不管用了。不懂行的想substring一下,还是不行的,看到下面的博客:https://blog.csdn.net/gxp1182893781/article/details/76916796 无论what使用哪种,一定要注意一个问题:每个CharacterStyle对象只能应用于一个Spanned,也就是说每个CharacterStyle对象只能使用一次。如果在给定的String中对多个字符应用,则只有最后一次应用会起作用。(没错)emememem.. 但是对于一个bulider,这个似乎是没用的ememem builder.setSpan(CharacterStyle.wrap(colorSpan[rand]), i - 1, i, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 这个并不行 只是它那个bulider更替了很多次 但是text坏掉了 照我们这样每次取出来 的text只是个string 不带样式的string而已 所以设置一次之后再设置 就走形了... 可以不提取string先试试吗?好了好了我知道你这个ssb可以这样了,我们来现实一点骨干一点好吗 啊啊啊啊啊啊啊啊!苦苦看了好半天,原来我的问题竟然出现在 edittext的获取方法上~!!! 应该是geteditabletext,如果gettext再tostring,你的样式当然没了 ,还是自己蠢吧,难怪别人都没遇到这种问题,大概本来别人就觉得不是问题吧…… 如果可以!!更有的放矢一点!你现在还是个菜菜菜菜鸟,前几天还在犯忘记找id的错误 (注意一下区间可能多点少点 变化颜色:ssb.setSpan(CharacterStyle.wrap(new ForegroundColorSpan(Color.GREEN)),start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 那么现在,新增个格式可以了。那么只有你选中的span都有格式,才能取消。如果卡在中间,就覆盖(这种情况不用判断啦 区间取消 这个emm。。 经过一番努力, StyleSpan[] spans = edit_passage.getEditableText().getSpans(i, i + 1, StyleSpan.class); for (StyleSpan span : spans) { 还真是,获取到你这个里有啥span,qwq,至于数组,是获取到有什么其他span吧qwq这样看挺好的还 起码qwq 分别加span样式的方法有了。。。(editable) 你需要: ssb.setSpan(new StyleSpan(Typeface.BOLD) (有点脑子;为什么几乎一样的上面可以下面 就不行?没理由呀,是你自己写错了吧。 subSequence(start, end)直接返回区间,直接分割。 发现removespan并不起作用。现在是可以调用人家的开源的外部库来编辑了呀。。。要是坐到像下载的那个那样这么好看就好了 emmmm,到底怎么能起作用呢?灵光一现,虽然editable.removespan 这个方法没有报错,但是显然,它是给ssb类写的~ 这样我ssb.removespan。 随机把它settet(ssb)。这大概需要一点灵性~~~ 好了,继续改了qwq啦啦啦 subsequence 左臂右开same 调试不出来。还是自己想的,大概斜体和下划线不一样而已qwq。。。 不一样而已。如果一样,会把StyleSpan的全部都给清除的。而underline不是一类的,这一类的还有的是 italic。 好的。那就可以回到原来的,用for循环判断了。 emmmm嗯。。。 直接removespan似乎是不行的,需要先getspan,再直接拿走掉。
here 1 :线性布局
android:orientation="vertical"/ horizontal 改变排布方式 android:layout_gravity="top"/ "center_vertical" / bottom 指定效果布满: 需要布满的: android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" 剩下那个就是: android:layout_width="wrap_content" android:layout_height="wrap_content" 这样,上面可以填满剩下的空间 记得一个0dp,一个大大的1!!!! 2 监听器和创建按钮:
Button add_blog=(Button)findViewById(R.id.add_blog); add_blog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });3 添加intent:
新建 活动,而不是直接新建一个布局 那就先用显式的intent吧 New→Activity→Empty Activity (只要不选是主activiy就行了哈哈哈) 这样,这个活动会自己去manifest里面注册好了~ [布局是动态加载出来的 super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit); 所以名字没事儿 不可怕 那么创建了之后,非常简单,肯定是要先new一个出来的,然后指定了前面和后面,最后就基本ok啦。 Intent intent=new Intent(MainActivity.this,EditActivity.class); startActivity(intent);传递个值过去:
字符串data,intent.putExtra("....",data) 第一个参数是键 第二是传递的 取得 Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); // 注意这里竟然只是一个引号就好了 getBooleanExtra.. 参数多一个default 传递回来:startActivityForResult() 方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,,还有onresult什么的,在书里自己看吧qwq 跳出框框提示4. 把数据库里面的东西存储到listview里面
listview需要 适配器: 使用android.R.layout.simple_list_item_1 作为ListView子项布局的id,这是一个Android内置的布局文件,里面只有一个TextView,可用于简单地显示一段文本。 (这个具体看那个(三)里面了5 Toast用法
Toast.makeText (FirstActivity.this, "aaaaa",Toast.LENGTH_SHORT).show(); context写自己.this Log.d(.....0) 用法 前面tag是字符串,可以是这个活动的名字, 后面的也是字符串6.Date类型和获取时间
发现这个老哥是获取了date直接设置的,不错,这样显然更方便一点 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String dateString = sdf.format(date); tv_date.setText(dateString); (ps: 在写好的里面改,好像库不能直接新建而要升级。emmm先不知道,所以先卸载再来之后再说 1 oncreate里面改了 2 查询的时候有了 3 存储进去的时候有 4 listview显示 )7.Image BUtton
qwq 先做了一个imageButton:找不到该放在哪,还是回书上这里我们在res目录下新建一个drawable-xhdpi目录,然后将事先准备好的两张图片img_1.png和img_2.png复制到该目录当中。但是为啥新建了目录根本看不到? 【名字不能有- 只能数字字母或者 下划线!】 但是,这样做效率也太低了,这button仅仅是放了上去而已,想随屏滚动、想控制xx真是刀山火海啊。 所以搜了半天,发现一个文本编辑的span类 下面这样是可以的 但只能设置一个 int start =edit_passage.getSelectionStart(); int end = edit_passage.getSelectionEnd(); SpannableStringBuilder ssb = new SpannableStringBuilder(edit_passage.getText().toString()); ssb.setSpan(new UnderlineSpan(), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); edit_passage.setText(ssb); 修改样式的位置是[start,end) 和substring一样 是左闭 右开的 就是这个问题:只能用一次,之后设置,之前的不管用了。不懂行的想substring一下,还是不行的,看到下面的博客:https://blog.csdn.net/gxp1182893781/article/details/76916796 无论what使用哪种,一定要注意一个问题:每个CharacterStyle对象只能应用于一个Spanned,也就是说每个CharacterStyle对象只能使用一次。如果在给定的String中对多个字符应用,则只有最后一次应用会起作用。(没错)emememem.. 但是对于一个bulider,这个似乎是没用的ememem builder.setSpan(CharacterStyle.wrap(colorSpan[rand]), i - 1, i, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 这个并不行 只是它那个bulider更替了很多次 但是text坏掉了 照我们这样每次取出来 的text只是个string 不带样式的string而已 所以设置一次之后再设置 就走形了... 可以不提取string先试试吗?好了好了我知道你这个ssb可以这样了,我们来现实一点骨干一点好吗 啊啊啊啊啊啊啊啊!苦苦看了好半天,原来我的问题竟然出现在 edittext的获取方法上~!!! 应该是geteditabletext,如果gettext再tostring,你的样式当然没了 ,还是自己蠢吧,难怪别人都没遇到这种问题,大概本来别人就觉得不是问题吧…… 如果可以!!更有的放矢一点!你现在还是个菜菜菜菜鸟,前几天还在犯忘记找id的错误 (注意一下区间可能多点少点 变化颜色:ssb.setSpan(CharacterStyle.wrap(new ForegroundColorSpan(Color.GREEN)),start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 那么现在,新增个格式可以了。那么只有你选中的span都有格式,才能取消。如果卡在中间,就覆盖(这种情况不用判断啦 区间取消 这个emm。。 经过一番努力, StyleSpan[] spans = edit_passage.getEditableText().getSpans(i, i + 1, StyleSpan.class); for (StyleSpan span : spans) { 还真是,获取到你这个里有啥span,qwq,至于数组,是获取到有什么其他span吧qwq这样看挺好的还 起码qwq 分别加span样式的方法有了。。。(editable) 你需要: ssb.setSpan(new StyleSpan(Typeface.BOLD) (有点脑子;为什么几乎一样的上面可以下面 就不行?没理由呀,是你自己写错了吧。 subSequence(start, end)直接返回区间,直接分割。 发现removespan并不起作用。现在是可以调用人家的开源的外部库来编辑了呀。。。要是坐到像下载的那个那样这么好看就好了 emmmm,到底怎么能起作用呢?灵光一现,虽然editable.removespan 这个方法没有报错,但是显然,它是给ssb类写的~ 这样我ssb.removespan。 随机把它settet(ssb)。这大概需要一点灵性~~~ 好了,继续改了qwq啦啦啦 subsequence 左臂右开same 调试不出来。还是自己想的,大概斜体和下划线不一样而已qwq。。。 不一样而已。如果一样,会把StyleSpan的全部都给清除的。而underline不是一类的,这一类的还有的是 italic。 好的。那就可以回到原来的,用for循环判断了。 emmmm嗯。。。 直接removespan似乎是不行的,需要先getspan,再直接拿走掉。
if(cnt==num){然后,代码可以再精简点,也可不用,先实现。 还有color和size,加underline。color应该好办吧(继续看即可)size if(isRemove) { SpanPart spanStyle = new SpanPart(fontStyle); spanStyle.start = getEditableText().getSpanStart(span); spanStyle.end = getEditableText().getSpanEnd(span); if(span instanceof AbsoluteSizeSpan){ spanStyle.fontSize = ((AbsoluteSizeSpan) span).getSize(); }else if(span instanceof ForegroundColorSpan){ spanStyle.color = ((ForegroundColorSpan) span).getForegroundColor(); } spanStyles.add(spanStyle); getEditableText().removeSpan(span); ===================================================
StyleSpan[] spans=ss.getSpans(start, end, StyleSpan.class);
for(int j=0; jif(spans[j].getStyle()==Typeface.BOLD)
ss.removeSpan(spans[j]);
}
复制别人的: 改gradle版本,先改外面的
然后 gradle可以用本地的(换好路径就ok 若有这个错:Warning:Configuration 'testCompile' is obsolete and has been replaced with 'testImplementation' and 'testApi'. 我的解决方法是,在 app 的 Gradle 中:【注意 是app下面的gradle~】 compile 改为 implementation androidTestCompile 改为 androidTestImplementation testCompile 改为 testImplementation 这样替换了过时的,再重新编译即可。 图上要 字数和编辑选项 dbHelper.getWritableDatabase();、 感觉还是先看老大哥的教程 什么的好啊自己踩坑太多了 …… 聊天界面什么的书上也讲的很好只是我没学qwq 最后把注释都删掉,为了好看,或者搞两个版本 https://developer.android.google.cn/reference/android/text/SpannableStringBuilder.html转载于:https://www.cnblogs.com/lx2331/p/10900903.html
更多相关文章
- Android(安卓)使用setContentView来实现Acitivity的跳转
- android布局页面中引入另一个布局页面
- Android(安卓)NotePad的简单实现
- Android(安卓)Okhttp3了解及封装类使用
- 实战Linux Bluetooth编程(三) HCI层编程
- 学习Android闹钟源代码(三)-AlarmClock类分析(part2)
- Android基础篇之AutoCompleteTextView
- android tabHost使用
- Android之智能问答机器人