小编Mar*_*tyn的帖子

Android:制作可滚动的自定义视图

我已经滚动了我自己的自定义视图并且可以在屏幕上绘制正常,但我真正想做的是将屏幕的测量高度设置为1000px并让用户在Y轴上滚动,但是我我有这样的问题.有人可以帮忙吗?

这是一些代码:

public class TestScreen extends Activity  {
     CustomDrawableView mCustomDrawableView;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);    
         mCustomDrawableView = new CustomDrawableView(this);
         setContentView(mCustomDrawableView);
     }
 }
Run Code Online (Sandbox Code Playgroud)

public class CustomDrawableView extends View {

    public CustomDrawableView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setMinimumHeight(1000);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawLine(...);
        // more drawing
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图通过调用super来覆盖scrollTo,scrollBy,awakenScrollBars等,但无济于事.我错过了一些愚蠢的事情,还是我犯了一些根本性的错误?

先感谢您,

马丁

加成:

我试图将此作为自定义组件添加到下面的布局文件,并将代码更改TestScreen为指向正确的资源setContentView(R.layout.exampleLayout),但这会导致模拟器崩溃.我尝试将代码评论到最低限度并且它仍然崩溃,所以我正在做的事情根本就是错误但是我不确定它是什么:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
       <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent">
            <com.martyn.testApp.CustomDrawableView
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
             />
       </ScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android view

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

AccessibilityService不返回视图ID

我正在Android中编写一个可访问性服务,它依赖于获取当前所选视图的视图ID,但是在某些设备上(Nexus 6P 6.0.1,三星Galaxy S6 edge + 5 + 6.0.1)我没有查看id和在其他人(HTC One M8 5.0.1)它通过罚款.因为它在某些设备上工作正常,我确信我的代码没有问题,但是我在下面发布了一个最小的测试用例.

任何人都可以帮助我在所有设备上获取服务报告ID吗?

A11y服务

public class ViewIdLoggingAccessibilityService extends AccessibilityService {
  @Override
  public void onAccessibilityEvent(AccessibilityEvent event) {
      AccessibilityNodeInfo source = event.getSource();
      if (source == null) {
          Log.d("onAccessibilityEvent", "source was null for: " + event);
      } else {
          String viewIdResourceName = source.getViewIdResourceName();
          Log.d("onAccessibilityEvent", "viewid: " + viewIdResourceName);
      }
  }

  @Override
  public void onInterrupt() {
      Log.d("!# onInterrupt", "called");
  }
}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

<manifest package="com.example.a11yservice"
          xmlns:android="http://schemas.android.com/apk/res/android"
    >

  <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"
      >

    <service
        android:name=".ViewIdLoggingAccessibilityService" …
Run Code Online (Sandbox Code Playgroud)

android accessibility android-a11y

7
推荐指数
1
解决办法
2496
查看次数

如何在与当前片段相同的空间中加载新片段

我正在寻找一些关于处理启动其他片段的片段的最佳方法的建议.

我正在转换一个应用程序,我开始使用更多基于活动的方法编写,然后开始将其转移到使用Fragments.我有一些片段用于启动一个新的活动,我想将它们移动到在当前片段所在的同一视图中启动其他片段.

例如 - 我有一个Activity,它有一个WebView,它使用一个WebViewClient来处理内部的js-> java交互.我的WebViewClient可以启动其他活动,我曾经这样做过:

 i = new Intent(context, GoogleMapActivity.class);
 startActivity(i);
Run Code Online (Sandbox Code Playgroud)

这个webview活动可以是全屏的,也可以是侧面有菜单的视图,但我希望webview能够尊重布局 - 所以如果菜单存在,它应该在启动新碎片时保持存在 - 我只是不知道编写启动Fragments的代码的最佳方法.

那么......在片段中,有没有一种方法可以基本上告诉新的片段加载到与当前片段相同的空间中,还是需要与活动进行一些交互?

**编辑**

鉴于可以使用一些不同的布局,我并不总是知道我应该将哪个ID放入片段中 - 因此我需要知道是否有办法在不知道id的情况下执行此操作(如replace例如,方法).

android android-fragments

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

为什么在View和Handler上发布和取消runnable导致不同的bahviour?

我一直在玩有关与RunnableS和发现,如果postDelayed一个Runnable一个View然后去除回调将无法正常工作,但是如果你做相同的,但发布RunnableHandler,然后取下回调不工作.

为什么这样做(Runnablerun()代码永远不会被执行):

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // execute some code
    }
};

Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
Run Code Online (Sandbox Code Playgroud)

在哪里没有(Runnablerun()代码总是被执行)?:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // execute some code
    }
};

View view = findViewById(R.id.some_view);
view.postDelayed(runnable, 10000);
view.removeCallbacks(runnable);
Run Code Online (Sandbox Code Playgroud)

android view handler runnable

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

Android - 如何获取朋友的位置

有没有办法可以访问谷歌纵横中的数据来返回谷歌纵横用户的位置?

gps android location google-latitude

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

android:检测App是否从市场下载

我有一个应用程序,我想通过市场和我自己的网站分发.我如何只使用一个版本和一个密钥,检查应用程序是否是从市场上下载的?

通过使用不同的密钥签名代码来回答这个问题,但我们理想地想要一个构建.

android download google-play

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

无法访问在 Android 帐户验证器中设置的首选项

我正在通过帐户身份验证器在复选框中设置首选项:

Intent settingsIntent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS");
settingsIntent.putExtra("account", mActiveAccount);
startActivityForResult(settingsIntent, ACCOUNT_COMPLETE);
Run Code Online (Sandbox Code Playgroud)

使用以下 xml:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.example.auth"
android:label="@string/auth_label"
android:accountPreferences="@xml/auth_preferences" />
Run Code Online (Sandbox Code Playgroud)

在 auth_preferences.xml 我有:

<?xml version="1.0" encoding="UTF-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/auth_preferences_general_group" />
<PreferenceScreen android:key="account_settings"
    android:title="@string/auth_preferences_general_details_title" 
    android:summary="@string/auth_preferences_general_details_description">
    <intent android:action="com.example.ACCOUNT_SETUP"
        android:targetPackage="com.example.core"
        android:targetClass="com.example.authentication.AuthenticatorAccountOptions" />
</PreferenceScreen>
<PreferenceCategory android:title="@string/auth_preferences_data_sync_group" >
    <CheckBoxPreference
          android:key="checkbox_pref"
          android:title="@string/auth_preferences_data_sync_syncwidget_title" 
          android:summary="@string/auth_preferences_data_sync_syncwidget_description"
          android:defaultValue="true"
          android:persistent="true" />  
</PreferenceCategory>   
Run Code Online (Sandbox Code Playgroud)

但是当我尝试检索它时,我无法在主代码中访问此复选框首选项:

SharedPreferences prefs = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
boolean isChecked = prefs.getBoolean("checkbox_pref", true);
Run Code Online (Sandbox Code Playgroud)

任何人都知道可以从哪里访问基于帐户身份验证器的首选项?

account android preferences

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

设置Android XML文件的默认编辑器

我刚刚更新了Eclipse的ADT插件,现在我的Android Layout XML文件在默认的XML编辑器中打开,而不是布局编辑器,我无法找到修复它的位置或方法.我还希望其他Android XML文件在正确的编辑器中打开,而不仅仅是布局文件,而不必通过右键单击打开 - >打开 - >选择编辑器.

有谁知道如何做到这一点?或者为什么会改变?

**编辑**添加了错误报告 - 如果发生这种情况,请将其加注星标或添加评论 - http://code.google.com/p/android/issues/detail?id=21004&q=adt&colspec= ID%20Type%20Status%20Owner%20Summary%20Stars

eclipse android

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

ICS中脱节的WebView绘图

我正在创建一个具有Webview内联其他元素的应用程序,嵌套在ScrollView中.我注意到在ICS中,在Galaxy Nexus设备上进行测试时,当页面被抛出时,WebView似乎与其余显示的元素脱节,导致WebView看起来浮动,因为它有几毫秒的值落后于绘画.这不会发生在Android的2.x版本中(未在3.x上测试).这是一个浮动效果的视频http://www.youtube.com/watch?v=avfBoWmooM4(如果你设置为1080p全屏,你可以看清楚)

任何人都可以建议为什么会发生这种情况或修复?

我在下面设置了一个测试项目来演示:

package com.martynhaigh.floating_web_view;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class FloatingWebViewTestActivity extends FragmentActivity {
    public final int viewId = 0x12345678;

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

        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        FrameLayout frame = new FrameLayout(this);
        frame.setId(viewId);
        setContentView(frame, lp);

        FloatingWebViewICSFragment fragment = new FloatingWebViewICSFragment();
        getSupportFragmentManager().beginTransaction().add(viewId, fragment).commit();
    }

    public static class FloatingWebViewICSFragment extends Fragment {

        private final …
Run Code Online (Sandbox Code Playgroud)

android android-webview android-4.0-ice-cream-sandwich

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

如何在包含文件名大小写更改的 Git 中应用补丁?

我创建了一个补丁,其中包含文件名大小写更改:

git mv -f confvars.sh ConfVars.sh
git commit -am 'test filename case change'
git format-patch -M -1 HEAD
Run Code Online (Sandbox Code Playgroud)

但是当我尝试应用该补丁时,出现错误:

git apply 0001-test-filename-case-change.patch
> error: ConfVars.sh: already exists in working directory
Run Code Online (Sandbox Code Playgroud)

如何应用此补丁而不引发错误?

**编辑**

为了澄清上面的例子:当应用补丁时,文件 ConfVars.sh 不存在,文件 confvars.sh 确实存在,我希望它被重命名,而是显示上述错误。

git filenames case-sensitive

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