小编mdu*_*pls的帖子

GridLayout吐出"不一致约束"调试级日志

我已经使用GridLayout几个星期了,当我打电话时我注意到了

gridLayout.requestLayout()
Run Code Online (Sandbox Code Playgroud)

它在LogCat中吐出以下调试级别消息:

D/android.widget.GridLayout(14048): horizontal constraints: x5 - x0 > 1115, x5 - x4 < 221, x4 - x3 < 221, x3 - x2 < 221, x2 - x1 < 221, x1 - x0 < 221 are inconsistent; permanently removing: x5 - x4 < 221. 
Run Code Online (Sandbox Code Playgroud)

我查看了GridLayout的来源,试图找出可能的原因,为什么"约束不一致",但我无法弄明白.

这些消息出现的事实 - 这是我应该关注的事情吗?我认为事情的布局没有任何问题.我在Fragments中有一个GridLayout作为ViewPager中的页面加载,所以当用户在LogCat中多次看到上面输出的页面之间滚动时.

android grid-layout android-layout

24
推荐指数
2
解决办法
7293
查看次数

Android ActionBar选项卡设置最初选择的选项卡

我注意到使用时

actionBar.setSelectedNavigationItem(x)
Run Code Online (Sandbox Code Playgroud)

在我的Activity的onCreate()方法中,始终首先选择位置0处的选项卡项,然后加载位置x处的选项卡项.这意味着(因为我正在使用片段)2片段被加载.其中一个是不必要的......

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Determine which bundle to use; either the saved instance or a bundle
    // that has been passed in through an intent.
    Bundle bundle = getIntent().getExtras();
    if (bundle == null) {
        bundle = savedInstanceState;
    }

    // Initialize members with bundle or default values.
    int position;
    if (bundle != null) {
        position = bundle.getInt("selected_tab");
    } else {
        position = 0;
    }

    // Set the tabs.
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); …
Run Code Online (Sandbox Code Playgroud)

android android-actionbar android-tabs

22
推荐指数
2
解决办法
3万
查看次数

仅在垂直方向上倾斜位图

我想歪曲(纠正我,如果这不是正确的单词)一个位图,使它看起来有深度.可视化我要求的一个好方法是星球大战的信用角度如何显示深度.

我尝试过以下方法:

canvas.getMatrix().postSkew(kx,ky,px,py);
Run Code Online (Sandbox Code Playgroud)

canvas.skew(sx,sy);
Run Code Online (Sandbox Code Playgroud)

但我没有取得多大成功.上述方法似乎总是将位图转换为平行四边形.有没有办法将位图转换为梯形?

这是我从Romain指出的示例中获取的一段代码.

canvas.rotate(-mOrientation[0] + mHeading, mCenterX, mCenterY);

camera.save();

if (mReverse) {
    camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
} else {
    camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
}

camera.rotateX(mOrientation[1]);
camera.applyToCanvas(canvas);
canvas.drawPath(mPath, mPaint);
canvas.drawCircle(mCenterX, mCenterY, mRadius - 37, mPaint);

camera.restore();
Run Code Online (Sandbox Code Playgroud)

android canvas bitmap skew

8
推荐指数
2
解决办法
7968
查看次数

当iTunes同步/文件传输完成时,iOS中的通知回调

我已经在文件系统发生变化时搜索了如何在iOS5中接收回调.我从Apple的网站上找到了以下示例,但它只在删除/创建文件时通知给定的代理.

DocInteraction示例应用程序中的DirectoryWatcher类

http://developer.apple.com/library/ios/#samplecode/DocInteraction/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010052

我是否可以通过API调用来接收"同步完成"回调事件?注意,用户可能会传输大文件,我需要知道传输何时完成.此外,在iOS5中,iTunes同步可以在后台进行,这意味着您的应用程序不一定会离开前台; 因此不会调用此方法:

- (void)applicationDidBecomeActive:(UIApplication *)application
Run Code Online (Sandbox Code Playgroud)

filesystemwatcher itunes sync ios5

6
推荐指数
1
解决办法
1495
查看次数

UIWebView内部的UIScrollView消耗触摸事件

我有多个自定义UIWebView作为UIScrollView中的子视图.我已经在UIViewController中为UIWebView实现了触摸方法,但是没有调用这些方法.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { }
Run Code Online (Sandbox Code Playgroud)

我在其他地方读过,它说UIScrollView会消耗这些事件.这是有道理的,但是如果UIWebView在UIScrollView本身之前没有收到触摸事件吗?可能发生的是,UIWebBrowserView(UIWebView的子视图)正在消耗这些事件.但是,这个类不能被子类化,因此我无法将超级视图链中的事件发送到UIScrollView.我已阅读上一个不应该永远把一个UIScrollView内一个UIWebView的苹果iOS文档,但我需要为我的目的这样做.

所以我的问题是:我的自定义UIWebView(即UIScrollView的子视图)如何接收触摸事件?

我的控制器和视图设置如下:

HomeViewController.h /.m /.xib
HomeView.h /.m (is a UIScrollView)
DashboardViewController.h /.m /.xib (custom UIWebView's)
Run Code Online (Sandbox Code Playgroud)

HomeViewController是从包含自定义视图的Nib文件加载的:HomeView.DashboardViewController从Nib文件加载.它包含一些标签,滑块等(请注意,这里没有自定义视图 - 我不是在这里继承UIView).

HomeViewController动态加载几个DashboardViewControllers并将其视图添加到HomeView.

DashboardViewController *dashboardViewController = [[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:[NSBundle mainBundle];
[homeView addSubview:dashboardViewController.view];
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uiscrollview uiview ios

5
推荐指数
1
解决办法
3344
查看次数

GridView的滚动偏移量

有没有办法确定GridView的当前滚动偏移或滚动位置?

View.getScrollY() // Underlying var is not updated during a scroll.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过设置一个OnScrollListener,但onScroll回调对于我的目的而言并不是很好.

以下是我尝试使用OnScrollListener确定滚动偏移的方法.

private int getScrollY() {
    int top = 0;
    if (mGridView.getChildCount() > 0) {
        final View firstView = mGridView.getChildAt(0);
        top = firstView.getTop();
    }
    return top;
}
Run Code Online (Sandbox Code Playgroud)

此代码的问题是向上滚动时返回的y偏移是不准确的; 顶视图被回收,因此y偏移似乎跳跃;

有没有一种很好的方法来计算GridView的滚动偏移量?我似乎无法找到一个好的解决方案.

android scroll gridview scroll-offset

5
推荐指数
1
解决办法
5123
查看次数

我们何时知道活动的观点何时布局

我有一个带有视图层次结构的Activity,如下所示:

<RelativeLayout>
    <LinearLayout>
        <GridLayout />
    </LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

顶部RelativeLayout占据整个屏幕,而LinearLayout占据屏幕的子集.我正在尝试设置GridLayout子视图的大小,使得n行和m列单元格的大小与n,m值以及LinearLayout的宽度和高度直接相关.

因此,例如,我正在尝试获取单元格的宽度和高度,如下所示:

int linearLayoutWidth = mLinearLayout.getMeasuredWidth();
int linearLayoutHeight = mLinearLayout.getMeasuredHeight();
...

int rows = mGridModel.getRows() + 1;
int columns = mGridModel.getColumns() + 1;
int cellWidth = (int) (linearLayoutWidth / columns);
int cellHeight = (int) (linearLayoutHeight / rows);
Run Code Online (Sandbox Code Playgroud)

不幸的是,在创建视图时,mLinearLayout.getMeasuredWidth()不会返回正确的大小.它总是返回实际设备的屏幕宽度,直到视图完全布局为止 - 在这种情况下为时已晚.我已经根据最初完全不正确的值给了我的孩子单元格视图的大小.

我的问题是 - 我怎么知道这些意见何时完全布局.我需要查询他们正确或实际测量的宽度/高度.

setContentView()创建视图并在理论上将它们排除在外.但他们的观点并不能保证在他们最终的正确位置/尺寸.

android android-layout android-view android-activity

4
推荐指数
1
解决办法
2095
查看次数

Android上的Facebook登录按钮导致ExceptionInInitializerError

我正在使用Facebook的Android SDK.如果我将Facebook的LoginButton添加到我的xml布局中.我收到运行时错误:ExceptionInInitializerError.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    FacebookSdk.sdkInitialize(getApplicationContext());
}
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

java.lang.ExceptionInInitializerError
            at java.lang.reflect.Constructor.newInstance(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
            at android.view.LayoutInflater.createView(LayoutInflater.java:607)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
            at android.app.Activity.setContentView(Activity.java:2145)
            at com.dupls.wedding.MainActivity.onCreate(MainActivity.java:25)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method) …
Run Code Online (Sandbox Code Playgroud)

android facebook facebook-sdk-4.0

4
推荐指数
1
解决办法
3681
查看次数