在achat项目中,对话内容的长宽设置为自适应。可是假设文本内容太多,则宽度几乎相同布满,若自己说的和对方说的都非常多内容。则满屏都是文字。则不easy分辨出是来自别人说的还是自己说的。那么须要对本身具有自适应的布局再来个宽度限制。

首先,在xml里面定义layout的layout_width/layout_height都要设置为wrap_content。然后在getView方法里面,一開始就让这个布局wrap_content(为什么xml里面设置了wrap_content。这里还要再设置一遍呢?由于布局的重用,不多说了),WidgetController.setLayoutWidth(holder.lay_content, MarginLayoutParams.WRAP_CONTENT);

然后。在填充完布局后,再来一段。让这个布局不能超过屏幕宽的50%。若超过则以这个为最大宽度:

		int w=(int)(DensityUtil.getScreenWidth()*0.5);
if (WidgetController.getWidth(holder.lay_content)>w){
WidgetController.setLayoutWidth(holder.lay_content,w);
}

以下是setLayoutWidth方法的代码,相当好用:

 /**
* 設置View的寬度(像素)。若設置爲自適應則應該傳入MarginLayoutParams.WRAP_CONTENT
* @param view
* @param width
*/
public static void setLayoutWidth(View view,int width)
{
/* MarginLayoutParams margin=new MarginLayoutParams(view.getLayoutParams());
margin.setMargins(margin.leftMargin,y, margin.rightMargin, y+margin.height);
//RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin);
//view.setLayoutParams(layoutParams);
ViewGroup.MarginLayoutParams layoutParams =newLayParms(view, margin);
//RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin);
view.setLayoutParams(layoutParams);
view.requestLayout();*/
if (view.getParent() instanceof FrameLayout){
FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams) view.getLayoutParams();
lp.width=width;
view.setLayoutParams(lp);
//view.setX(x);
view.requestLayout();
}
else if (view.getParent() instanceof RelativeLayout){
RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)view.getLayoutParams();
lp.width=width;
view.setLayoutParams(lp);
//view.setX(x);
view.requestLayout();
}
else if (view.getParent() instanceof LinearLayout){
LinearLayout.LayoutParams lp=(LinearLayout.LayoutParams)view.getLayoutParams();
lp.width=width;
view.setLayoutParams(lp);
//view.setX(x);
view.requestLayout();
}
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcm9ja2xlZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

转载请注明出处:http://blog.csdn.net/rocklee

android 用java代码设置布局、视图View的宽度/高度或自适应的更多相关文章

  1. JAVA代码设置selector不同状态下的背景

    Selector设置button点击效果(详细)以及常见问题https://www.jianshu.com/p/a0ddba6d7969 Android 代码动态设置TextView的背景.颜色Sel ...

  2. js调用android本地java代码

    js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...

  3. Android逆向-java代码基础

    作者:I春秋作家——HAI_ 0×00 前言 看这篇可以先看看之前的文章,进行一个了解.Android逆向-java代码基础(1)Android逆向-java代码基础(2) 之前看到有大佬用smali ...

  4. Android在java代码中设置margin

    我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...

  5. Android -- java代码设置margin

    我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...

  6. Android动态Java代码调整window大小

    Android调整window大小 举一个例子,设置当前的APP所需要的屏幕高度为设备高度的一半: Window window = getActivity().getWindow(); WindowM ...

  7. Unity 中调用Android的JAVA代码

    首先我们要创建一个android项目 因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中.接口包的所在地,打开Finder->应用程序->Unit ...

  8. Android视频通话Java代码

      近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习.但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛.在国内我找到了一个比較好音视频通信解决方式(百 ...

  9. Android中用Java代码实现zip文件解压缩

    如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...

随机推荐

  1. BZOJ DZY Loves Math系列

    ⑤(BZOJ 3560) $\Sigma_{i_1|a_1}\Sigma_{i_2|a_2}\Sigma_{i_3|a_3}\Sigma_{i_4|a_4}...\Sigma_{i_n|a_n}\ph ...

  2. UNIX环境高级编程--3

    文件IO 函数lseek: 每个打开文件都有一个与其相关联的“当前文件偏移量”,用来度量从文件开始处计算的字节数.除非指定O_APPEND选项,否则该偏移量被置为0.如果文件描述符指向的是一个管道.F ...

  3. C# linq学习【转】

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  4. [ USACO 2018 OPEN ] Out of Sorts (Silver)

    \(\\\) \(Description\) 运行以下代码对一长为\(N\)的数列\(A\)排序,不保证数列元素互异: cnt = 0 sorted = false while (not sorted ...

  5. Unity 引擎UGUI之自定义树形菜单(TreeView)

    先上几张效果图:          如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...

  6. POJ_3279_(dfs)(状态)

    ---恢复内容开始--- Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8219   Accepted:  ...

  7. The Standard SSL Handshake

    The following is a standard SSL handshake when RSA key exchange algorithm is used: 1.  Client Hello ...

  8. Scrapy下载器中间件用法示例

    1.爬虫文件httpbin.py # -*- coding: utf-8 -*- import scrapy class HttpbinSpider(scrapy.Spider): name = 'h ...

  9. 编译OpenWrt失败

    /home/fly/work_dir/OpenWrt-SDK/OpenWrt-Test/trunk/scripts/download.pl "/home/fly/work_dir/OpenW ...

  10. springcloud(五):Eureka提供数据的客户端连接Docker的mysql

    一.提供数据的客户端需要连接数据了,因此需要我们使用mybatis了,等下使用idea生成mybaits和web的依赖 二.提供数据的客户端项目 1.创建项目 2.选择idea自动给我们生成的依赖 3 ...