android requestLayout() improperly called by错误 5C

在写一个小东西,程序也能跑起来,就是会不断地打印出requestLayout() improperly called by
。查了资料,出现这个报错好像有蛮多原因,没找到具体的解决方法,求助,先谢过。

错误貌似出现在这儿:

public class ImageText extends LinearLayout{
private Context mContext = null;
private ImageView mImageView = null;
private TextView mTextView = null;
private final static int DEFAULT_IMAGE_WIDTH = 64;
private final static int DEFAULT_IMAGE_HEIGHT = 64;
private int CHECKED_COLOR = Color.rgb(29, 118, 199); //

private int UNCHECKED_COLOR = Color.GRAY;   //


public ImageText(Context context) {
    super(context);
    mContext = context;
    Log.v("***imageText","***");
}

public ImageText(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View parentView = inflater.inflate(R.layout.image_text_layout, this, true);
    mImageView = (ImageView)findViewById(R.id.iv_icon);
    mTextView = (TextView)findViewById(R.id.tv_text);
    Log.v("***imageText","***");
}

public void setImage(int id){
    if(mImageView != null){
        mImageView.setImageResource(id);
        setImageSize(DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT);
        Log.v("***setImage","***");
    }
}

public void setText(String s){
    Log.v("***setText","***");
    if(mTextView != null){
        mTextView.setText(s);
        mTextView.setTextColor(UNCHECKED_COLOR);
    }
}

private void setImageSize(int w, int h){
    if(mImageView != null){
        ViewGroup.LayoutParams params = mImageView.getLayoutParams();
        params.width = w;
        params.height = h;
        mImageView.setLayoutParams(params);
    }
}

public void setChecked(int itemID){
    Log.v("***setChecked**","***");
    if(mTextView != null){
        mTextView.setTextColor(CHECKED_COLOR);
    }
    int checkDrawableId = -1;
    switch (itemID){
    case Constant.BTN_FLAG_NEARBY:
        checkDrawableId = R.drawable.nearby_selected;
        break;
    case Constant.BTN_FLAG_MESSAGE:
        checkDrawableId = R.drawable.message_selected;
        break;
    case Constant.BTN_FLAG_DEAL:
        checkDrawableId = R.drawable.deal_selected;
        break;
    case Constant.BTN_FLAG_MY:
        checkDrawableId = R.drawable.my_selected;
        break;
    default:break;
    }
    if(mImageView != null){
        mImageView.setImageResource(checkDrawableId);
    }
}

// @Override

 // public boolean onInterceptTouchEvent(MotionEvent ev) {
//      return true;
//  }


}

错误信息,无限地输出日志
11-14 13:31:33.710 9046-9046/org.vecrates W/View: requestLayout() improperly called by org.vecrates.ui.ImageText{787c549 V.E...C.. ......I. 438,40-536,170 #7f0b0059 app:id/btn_message} during second layout pass: posting in next frame
11-14 13:31:33.710 9046-9046/org.vecrates W/View: requestLayout() improperly called by org.vecrates.ui.ImageText{2616e4e V.E...C.. ......I. 806,40-904,170 #7f0b005a app:id/btn_deal} during second layout pass: posting in next frame
11-14 13:31:33.726 9046-9046/org.vecrates W/View: requestLayout() improperly called by org.vecrates.ui.ImageText{787c549 V.E...C.. ......I. 438,40-536,170 #7f0b0059 app:id/btn_message} during layout: running second layout pass
11-14 13:31:33.726 9046-9046/org.vecrates W/View: requestLayout() improperly called by org.vecrates.ui.ImageText{2616e4e V.E...C.. ......I. 806,40-904,170 #7f0b005a app:id/btn_deal} during layout: running second layout pass
11-14 13:31:33.726 9046-9046/org.vecrates W/View: requestLayout() improperly called by org.vecrates.ui.ImageText{787c549 V.E...C.. ......I. 438,40-536,170 #7f0b0059 app:id/btn_message} during second layout

3个回答

楼主请问你的问题解决了吗?我也碰到了这个问题

我也遇到了这个问题,也不是同一个原因,而是只要用了RecyclerView就会报这个警告

Veson__
此人已下架 虽然报的是同一个错误,但是却不是同一个原因造成的
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ListView嵌套GridView
ListView嵌套GridView得时候log为什么会一直打印 requestLayout() improperly called by cn.tatagou.sdk.view.MyGridView{392a2e0 VFED.VC.. .F...... 0,360-1080,866 #7f0d0165 app:id/gv_columns} during second layout pass: posting in next frame requestLayout() improperly called by cn.tatagou.sdk.view.MyGridView{392a2e0 VFED.VC.. .F....ID 0,360-1080,866 #7f0d0165 app:id/gv_columns} during layout: running second layout pass ![图片说明](https://img-ask.csdn.net/upload/201612/28/1482917930_853815.png)
requestLayout()方法请求出现问题
Android中使用requestLayout()方法请求重绘,偶然出现onLayout()方法调用不到的情况 不知道有没有大神遇到过这种情况.偶然出现的!跪求解决方案啊... 如有大神帮忙解决必有重谢,可以以身相许!在线等........
这个requestLayout怎么清除
![图片说明](https://img-ask.csdn.net/upload/201506/02/1433240547_44079.png)
Android的LinerLayout动态添加(addView)布局文件,不起效果??
package tech.together.Character.Components; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import java.util.List; import tech.together.R; /** * Created by think on 2016/6/5. */ public class BecomeEmployeeSkills extends LinearLayout implements View.OnClickListener { private LinearLayout skills; //private LayoutParams param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); private LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); private List<EditSkillsView> editSkillsViews; public BecomeEmployeeSkills(Context context) { super(context); initView(context); } public BecomeEmployeeSkills(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } private void initView(Context context) { View.inflate(context, R.layout.layout_become_employee_skills, this); findViewById(R.id.add).setOnClickListener(this); findViewById(R.id.submit).setOnClickListener(this); skills = (LinearLayout) findViewById(R.id.skills); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.add: //TODO 使用EditSkillView Log.d("URL", "onClick()ADD"); View view2 = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.view_edit_skill, skills, false); view2.setLayoutParams(param); skills.addView(view2); invalidate(); skills.requestLayout(); break; case R.id.submit: //TODO break; } } } addView后用手机测试,点击按钮没有反应,也不报错,然后输出的是下面的log 06-07 09:47:39.350 8325-8325/tech.together D/URL: onClick()ADD 06-07 09:47:39.366 8325-8325/tech.together D/ColorDrawable: Color = -1118482, canvas = android.view.GLES20RecordingCanvas@2d50567e, mTintMode = SRC_IN, mTint = null, ColorDrawable = android.graphics.drawable.ColorDrawable@3e3c5c62 06-07 09:47:39.544 8325-8325/tech.together V/SettingsInterface: from settings cache , name = sound_effects_enabled , value = 0 0 真不知道是为什么原因,求解释!
求助UI线程问题,Only the original threa
com.example.joey.lbstest E/AndroidRuntime: FATAL EXCEPTION: LocationClient Process: com.example.joey.lbstest, PID: 6619 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6916) at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1080) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.view.View.requestLayout(View.java:19664) at android.widget.TextView.checkForRelayout(TextView.java:7370) at android.widget.TextView.setText(TextView.java:4482) at android.widget.TextView.setText(TextView.java:4339) at android.widget.TextView.setText(TextView.java:4314) at com.example.joey.lbstest.MainActivity$MyLocationListener.onReceiveLocation(MainActivity.java:91) at com.baidu.location.LocationClient.sendFirstLoc(Unknown Source) at com.baidu.location.LocationClient.access$3200(Unknown Source) at com.baidu.location.LocationClient$a.handleMessage(Unknown Source) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:160) at android.os.HandlerThread.run(HandlerThread.java:61) 花了好长时间都没法解决,有大神帮忙吗0.0 MainActivity:
android 父布局调用addview之后,会刷新自己和子布局,导致父布局回到最开始的布局状态
如图: ![图片说明](https://img-ask.csdn.net/upload/201904/12/1555038985_674087.gif) 现在想做到添加子view以后,父布局不会回到最开始的状态,请问各路大神有什么好方法吗? 父view是一个自定义控件,加入了边界检测,可以上下左右拖动 子view就是一个桌子,通过调用父布局的addview加入到父布局中 遇到这个问题的时候去查过源码,源码中addview(View view)最后会调用 ``` public void addView(View child, int index, LayoutParams params) { if (DBG) { System.out.println(this + " addView"); } if (child == null) { throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup"); } // addViewInner() will call child.requestLayout() when setting the new LayoutParams // therefore, we call requestLayout() on ourselves before, so that the child's request // will be blocked at our level requestLayout(); invalidate(true); addViewInner(child, index, params, false); } ``` 这个方法最后会调用requestLayout()和invalidate(true) 我判断就是因为调用了这两个方法,所以导致父布局回到最开始的状态了。 各路大神有没有不调用addview把子布局添加进去,或者能避免requestLayout()和invalidate(true)的影响 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊 不胜感激啊
android 属性动画ValueAnimator改变控件宽度丢帧。求大神解答。
ValueAnimator colseAnimator = ValueAnimator.ofFloat(closeWidth, 0); colseAnimator.addUpdateListener(new AnimatorUpdateListener() { LinearLayout.LayoutParams params = (LayoutParams) closeView.getLayoutParams(); @Override public void onAnimationUpdate(ValueAnimator animation) { float f = (Float) animation.getAnimatedValue(); params.width = (int) f; closeView.requestLayout(); } });
Android 自定义ViewGroup addView,视图不刷新
``` class AutoArrangeLayout(context: Context, attrs: AttributeSet?) : ViewGroup(context, attrs) { var horizontalSpacing: Int = 0 set(value) { field = value requestLayout() } var verticalSpacing: Int = 0 set(value) { field = value requestLayout() } init { val ta = context.obtainStyledAttributes(attrs, R.styleable.AutoArrangeLayout) horizontalSpacing = ta.getDimensionPixelSize(R.styleable.AutoArrangeLayout_horizontalSpacing, 20) verticalSpacing = ta.getDimensionPixelSize(R.styleable.AutoArrangeLayout_verticalSpacing, 20) ta.recycle() } override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { if (changed) { (0..childCount) .asSequence() .map { getChildAt(it) } .forEach { it?.let { val get = map[it] if (get != null) { it.layout(get.x, get.y, get.x + it.measuredWidth, get.y + it.measuredHeight) } } } } } var map: HashMap<View, Point> = HashMap() override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { var length = paddingLeft var rowHeight = 0 var lastLineHeight = paddingTop + verticalSpacing map.clear() (0..childCount). map { getChildAt(it) } .forEach { it?.let { measureChild(it, widthMeasureSpec, heightMeasureSpec) if (it.measuredWidth + length + horizontalSpacing + paddingLeft + paddingRight <= measuredWidth) { val point = Point() length += horizontalSpacing point.x = length point.y = lastLineHeight map.put(it, point) length += it.measuredWidth rowHeight = Math.max(it.measuredHeight, rowHeight) } else { length = horizontalSpacing + paddingLeft lastLineHeight += rowHeight + verticalSpacing val point = Point() point.x = length point.y = lastLineHeight map.put(it, point) length += it.measuredWidth rowHeight = it.measuredHeight } } } val heightMode = MeasureSpec.getMode(heightMeasureSpec) var calcHeightMeasureSpec = heightMeasureSpec if (heightMode == MeasureSpec.AT_MOST) { calcHeightMeasureSpec = MeasureSpec.makeMeasureSpec(lastLineHeight + rowHeight + verticalSpacing, MeasureSpec.EXACTLY) } super.onMeasure(widthMeasureSpec, calcHeightMeasureSpec) } } ``` 上述是自定义ViewGroup的类代码,是一个自动排列布局.<br/>测试的时候在界面上还有个btn,点击一次会调用一次该类实例的addView方法,但是发现如果addView后,在该类的高设为wrap的情况下,如果高不足以新换一行则addView添加的视图不显示,若足够新换一行,则会连同之前添加的未显示的view一次性全部显示到界面上。
从 PHP MySQL 中检索数据然后传到视图列表中
我想从 PHP MySQL 中检索一个数据,然后传到试图列表中。我使用的下面的代码,但是还是没把数据放到 List View 中,如何改这个问题。 贴出我的代码,大家看看是哪儿出错了。 Activity Codes public class View extends Activity{ // Progress Dialog // Creating JSON Parser object JSONParser jParser = new JSONParser(); ArrayList<HashMap<String, String>> productsList; // url to get all products list private static String url_all_products = "http://atlantis-us.com/viewFile.php"; // JSON Node names private static final String TAG_NAME = "name"; ListView lv; // products JSONArray JSONArray products = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.all_products); // Get listview lv = (ListView) findViewById(R.id.list); // Hashmap for ListView productsList = new ArrayList<HashMap<String, String>>(); new LoadAllProducts().execute(); } class LoadAllProducts extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); Log.d("All Products: ", json.toString()); ListAdapter adapter = new SimpleAdapter( View.this, productsList, R.layout.list_item, new String[] { TAG_NAME}, new int[] {R.id.name }); // updating listview lv.setAdapter(adapter); return null; } } } JSONParser Class public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } // function get json from url // by making HTTP POST or GET mehtod public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) { // Making HTTP request try { // check for request method if(method == "POST"){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } log cat 10-26 14:57:53.673: I/Choreographer(1391): Skipped 61 frames! The application may be doing too much work on its main thread. 10-26 14:57:54.653: D/All Products:(1391): {"products":[{"name":"Ghalia"},{"name":"yuan"},{"name":"kevin"},{"name":"kevin"},{"name":"kevin"},{"name":"Ghalia"},{"name":"Ghalia"},{"name":"dbgg"},{"name":"Ghalia"},{"name":"Ghalia"},{"name":"test"}]} 10-26 14:57:54.663: W/dalvikvm(1391): threadid=11: thread exiting with uncaught exception (group=0x40a13300) 10-26 14:57:54.684: E/AndroidRuntime(1391): FATAL EXCEPTION: AsyncTask #1 10-26 14:57:54.684: E/AndroidRuntime(1391): java.lang.RuntimeException: An error occured while executing doInBackground() 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.os.AsyncTask$3.done(AsyncTask.java:299) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.lang.Thread.run(Thread.java:856) 10-26 14:57:54.684: E/AndroidRuntime(1391): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4607) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.View.requestLayout(View.java:15129) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.View.requestLayout(View.java:15129) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.View.requestLayout(View.java:15129) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.View.requestLayout(View.java:15129) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.view.View.requestLayout(View.java:15129) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.widget.AbsListView.requestLayout(AbsListView.java:1928) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.widget.ListView.setAdapter(ListView.java:488) 10-26 14:57:54.684: E/AndroidRuntime(1391): at com.example.mysql.View$LoadAllProducts.doInBackground(View.java:74) 10-26 14:57:54.684: E/AndroidRuntime(1391): at com.example.mysql.View$LoadAllProducts.doInBackground(View.java:1) 10-26 14:57:54.684: E/AndroidRuntime(1391): at android.os.AsyncTask$2.call(AsyncTask.java:287) 10-26 14:57:54.684: E/AndroidRuntime(1391): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 10-26 14:57:54.684: E/AndroidRuntime(1391): ... 5 more
关于android自定义View的requestLauout和invalidate我一直有个疑问
查询百度,会有下面的解释 requestLayout:会调用onMeasure onLayout invalidate:会调用onDraw 问题1:为什么我自定义的View,我在调用requestLayout时依然会调用onDraw这个方法 问题2:为什么我调用invalidate(rect)进行局部刷新时会重新走一遍onDraw的所有方法,而不是只走对应的局部方法,这样的话和invalidate就没有区别了啊? 问题3:在自定义ViewGroup时,在init时new出一个View并add上去,调用ViewGroup的requestLayout方法后,发现没有调用这个View的onMeasure方法,或者调用ViewGroup的invalidate后,发现没有调用子View的onDraw方法。 这些问题都是为什么?请相关大牛帮忙细心解释。
(Android)如何只在特定的view上面调用绘制的三个步骤?
如题,当前用requestLayout可以实现效果,但是requestLayout是从根布局开始对所有的布局 进行操作。而我现在要高频刷新界面,所以requestLayout会有些不流畅。请问如何只在特定的 view唤起onMeasure,layout操作。难道要主动调用View.measure()?那widthMeasureSpec与heightMeasureSpec是要自己创建么?请大神给个思路建议
android ValueAnimator改变控件宽度实现收缩展开卡顿怎么破?
ValueAnimator colseAnimator = ValueAnimator.ofFloat(closeWidth, 0); colseAnimator.addUpdateListener(new AnimatorUpdateListener() { LinearLayout.LayoutParams params = (LayoutParams) closeView.getLayoutParams(); @Override public void onAnimationUpdate(ValueAnimator animation) { float f = (Float) animation.getAnimatedValue(); params.width = (int) f; closeView.requestLayout(); } });
安卓关于UIUtils工具类的使用
小弟最近项目用到了一个UIUtils的UI工具类,请问这个类是要自己进行添加的吗? 如果是的话,我找了几篇大神写的帖子,其中有个地方不是很懂:(代码如下) /** * @return 应用的上下文 */ public static Context getContext() { return xxxApplication.getInstance(); } /** * 获取资源对象 */ public static Resources getResources() { return getContext().getResources(); } /** * @param id * @return 资源文件字符串 */ public static String getString(int id) { return getResources().getString(id); } /** * @param id * @return 资源文件字符串数组 */ public static String[] getStringArray(int id) { return getResources().getStringArray(id); } /** * @param id * @return 资源文件图片 */ public static Drawable getDrawable(int id) { return ContextCompat.getDrawable(getContext(), id); } /** * @param id * @return 资源文件颜色 */ public static int getColor(int id) { return ContextCompat.getColor(getContext(), id); } /** * @param id * @return 颜色的状态选择器 */ public static ColorStateList getColorStateList(int id) { return ContextCompat.getColorStateList(getContext(), id); } /** * @param id * @return 尺寸 */ public static int getDimen(int id) { // 返回具体像素值 return getResources().getDimensionPixelSize(id); } /** * dp ->px * * @param dp * @return */ public static int dp2px(float dp) { float density = getResources().getDisplayMetrics().density; return (int) (dp * density + 0.5f); } /** * px ->dp * * @param px * @return */ public static float px2dp(int px) { float density = getResources().getDisplayMetrics().density; return px / density; } /** * 加载布局文件 * * @param id * @return */ public static View inflate(int id) { return View.inflate(getContext(), id, null); } /** * 把自身从父View中移除 * * @param view */ public static void removeSelfFromParent(View view) { if (view != null) { ViewParent parent = view.getParent(); if (parent != null && parent instanceof ViewGroup) { ViewGroup group = (ViewGroup) parent; group.removeView(view); } } } /** * 请求View树重新布局,用于解决中层View有布局状态而导致上层View状态断裂 * * @param view * @param isAll */ public static void requestLayoutParent(View view, boolean isAll) { ViewParent parent = view.getParent(); while (parent != null && parent instanceof View) { if (!parent.isLayoutRequested()) { parent.requestLayout(); if (!isAll) { break; } } parent = parent.getParent(); } } /** * 判断触点是否落在该View上 * * @param ev * @param v * @return */ public static boolean isTouchInView(MotionEvent ev, View v) { int[] vLoc = new int[2]; v.getLocationOnScreen(vLoc); float motionX = ev.getRawX(); float motionY = ev.getRawY(); return motionX >= vLoc[0] && motionX <= (vLoc[0] + v.getWidth()) && motionY >= vLoc[1] && motionY <= (vLoc[1] + v.getHeight()); } /** * findViewById的泛型封装,减少强转代码 * * @param layout * @param id * @param <T> * @return */ public static <T extends View> T findViewById(View layout, int id) { return (T) layout.findViewById(id); } /** * *获取屏幕的比例 * * @param context *@return */ public static float getScaledDensity(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); float value = dm.scaledDensity; return value; } /** * 获取控件的高度,如果获取的高度为0,则重新计算尺寸后再返回高度 * * @param view * @return */ public static int getViewMeasuredHeight(View view) { calcViewMeasure(view); return view.getMeasuredHeight(); } /** * 获取控件的宽度,如果获取的宽度为0,则重新计算尺寸后再返回宽度 * * @param view * @return */ public static int getViewMeasuredWidth(View view) { calcViewMeasure(view); return view.getMeasuredWidth(); } /** * 测量控件的尺寸 * * @param view */ public static void calcViewMeasure(View view) { int width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int expandSpec = View.MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST); view.measure(width, expandSpec); } /** * 设置textview指定文字为某一颜色 * * @param content 显示的文字 * @param color 需要转换成的颜色值 * @param start 需要变色文字开始位置 * @param end 需要变色文字结束位置 */ public static SpannableStringBuilder changeTextColor(String content, int color, int start, int end) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(content); spannableStringBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return spannableStringBuilder; } 上面在一开始获取上下文时有一个 return xxxApplication.getInstance(); 这个xxxApplication是指我当前应用的名字吗,应该怎么知道,我已经把握觉得可能的名字打进去了都报红
在一个 ClickListener 中动态的添加一个视图
我想在 OnClickListener 的 RelativeLayout中添加一个视图: montrolButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // myParent is a relative layout // newChild is an ImageView myParent.addView(newChild); requestLayout(); } }); 我查看了 HierarchyViewer,但是没发现添加新的子类,哪里出错呢?
listView疑难杂症专科,没感冒也来看看。
代码向上 ``` private List<String> mList; private SimpleAdapter mAdapter; private ListView mLv; public void onCreate(Bundle saveIn){ mLv = (ListView)findViewByID(R.id.lv); mList = new ArrayList(); mList.add("123"); mLv.setAdapter(mAdapter); mAdapter = new SimpleAdapter(this,mList,android.R.layout.item_1_simple); } ``` 看出问题了吗? 上面执行setAdapter的时候mAdapter其实还没初始化,但不会报错。不过数据不会显示出来。 setAdapter()方法源码: ``` @Override public void setAdapter(ListAdapter adapter) { if (mAdapter != null && mDataSetObserver != null) { mAdapter.unregisterDataSetObserver(mDataSetObserver); } resetList(); mRecycler.clear(); if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter); } else { **mAdapter = adapter;** } mOldSelectedPosition = INVALID_POSITION; mOldSelectedRowId = INVALID_ROW_ID; // AbsListView#setAdapter will update choice mode states. super.setAdapter(adapter); if (mAdapter != null) { mAreAllItemsSelectable = mAdapter.areAllItemsEnabled(); mOldItemCount = mItemCount; mItemCount = mAdapter.getCount(); checkFocus(); mDataSetObserver = new AdapterDataSetObserver(); mAdapter.registerDataSetObserver(mDataSetObserver); mRecycler.setViewTypeCount(mAdapter.getViewTypeCount()); int position; if (mStackFromBottom) { position = lookForSelectablePosition(mItemCount - 1, false); } else { position = lookForSelectablePosition(0, true); } setSelectedPositionInt(position); setNextSelectedPositionInt(position); if (mItemCount == 0) { // Nothing selected checkSelectionChanged(); } } else { mAreAllItemsSelectable = true; checkFocus(); // Nothing selected checkSelectionChanged(); } requestLayout(); } ``` 关键应该是加粗代码没执行,本人觉得问题就在这里了。 但是: ``` if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) { mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter); } else { **mAdapter = adapter;** } ``` 这个if里面判断的原理?实在不懂。求指教
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
进程通信方式总结与盘点
​ 进程通信是指进程之间的信息交换。这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。从某方面来讲,进程通信可以解决进程同步问题。 ​ 首先回顾下我们前面博文中讲到的信号量机制,为了实现进程的互斥与同步,需要在进程间交换一定的信息,因此信号量机制也可以被归为进程通信的一种方式,但是也被称为低级进程通信,主要原因为: 效率低:一次只可操作少量的...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
听说了吗?阿里双11作战室竟1根网线都没有
双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此。 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“一地狼藉”;到如今媲美5G的wifi网速,到现场却看不到一根网线;从当年使用商用AP(无线路由器),让光明顶双11当天断网一分钟,到全部使用阿里自研AP……阿里巴巴企业智能事业部工程师们提供的基础保障...
在阿里,40岁的奋斗姿势
在阿里,40岁的奋斗姿势 在阿里,什么样的年纪可以称为老呢?35岁? 在云网络,有这样一群人,他们的平均年龄接近40,却刚刚开辟职业生涯的第二战场。 他们的奋斗姿势是什么样的呢? 洛神赋 “翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。” 爱洛神,爱阿里云 2018年,阿里云网络产品部门启动洛神2.0升...
关于研发效能提升的思考
研发效能提升是最近比较热门的一个话题,本人根据这几年的工作心得,做了一些思考总结,由于个人深度有限,暂且抛转引入。 三要素 任何生产力的提升都离不开这三个因素:人、流程和工具,少了其中任何一个因素都无法实现。 人,即思想,也就是古人说的“道”,道不同不相为谋,是制高点,也是高层建筑的基石。 流程,即方法,也是古人说的“法”。研发效能的提升,也就是要提高投入产出比,既要增加产出,也要减...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
入职阿里5年,他如何破解“技术债”?
简介: 作者 | 都铎 作为一名技术人,你常常会听到这样的话: “先快速上线” “没时间改” “再缓一缓吧” “以后再解决” “先用临时方案处理” …… 当你埋下的坑越来越多,不知道哪天哪位同学就会踩上一颗雷。特别赞同“人最大的恐惧就是未知,当技术债可说不可见的时候,才是最让人不想解决的时候。” 作为一个程序员,我们反对复制粘贴,但是我们经常会见到相似的代码,相同的二方包,甚至整个代码...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
深度学习入门笔记(十八):卷积神经网络(一)
欢迎关注WX公众号:【程序员管小亮】 专栏——深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
你也能看懂的:蒙特卡罗方法
蒙特卡罗方法,也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法 蒙特卡罗方法可以粗略地分成两类:一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
JAVA后端面试《Spring》
Spring1.Spring是什么?有什么好处?2.IOC是什么?有什么好处?具体过程?3.DI是什么?4.IOC和DI的关系?5.bean标签的属性有哪些?6.IOC创建对象有哪几种方式?7.Spring是如何实现IOC的?也就是如何创建对象的? 1.Spring是什么?有什么好处? 概念: SPring是一个支持控制反转(IOC)和面向切面编程(AOP)的容器框架。 好处: 两降低&gt;&...
AI 医生“战疫”在前线
作者| Just出品|CSDN(CSDNnews)紧急驰援疫区,AI医生也出动了。截止到2月6日,随着新冠病毒肺炎疫情的不断发展,全国累计已有31161例确诊病例,26359例疑...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问