小编Jus*_*ain的帖子

无法弄清楚如何使用ImageViewTouch挂钩

我正在使用该库(https://github.com/sephiroth74/ImageViewZoom),但我在试图找出投掷时遇到了问题.我已经阅读了其他答案,但是他们没有显示用于获取fling事件的实际代码.

我迷上了这样的事件:

 mImage.setOnTouchListener(new OnTouchListener()
 {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
      return gestureDetector.onTouchEvent(event);
 }
 });
 gestureDetector = new GestureDetector(this, new MyGestureDetector(getApplicationContext(), this));
Run Code Online (Sandbox Code Playgroud)

MyGestureDetector扩展了SimpleOnGestureListener.然后我重写onFling方法.

这种方法的问题在于它禁用了1次触摸,因此禁用了平移功能.我敢肯定有一种更好的方式来挂钩事件(所以我可以改变图像),但我不知道如何-newb :(

我正在寻找的是一种挂钩方法,类似于ImageViewZoom提供的其他钩子.像这样:

         mImage = (ImageViewTouch) view.findViewById(R.id.image);
    mImage.setOnClickListener(this);

    // set the default image display type
    mImage.setDisplayType( ImageViewTouchBase.DisplayType.FIT_TO_SCREEN );

    mImage.setSingleTapListener( new ImageViewTouch.OnImageViewTouchSingleTapListener()
    {
        @Override
        public void onSingleTapConfirmed()
        {
            Log.d(TAG, "onSingleTapConfirmed");
            setToolbarsVisible(!isToolbarsVisible());
        }
    });
Run Code Online (Sandbox Code Playgroud)

android android-fragments

8
推荐指数
1
解决办法
326
查看次数

如何根据构建变体更改AndroidManifest.xml文件?

我有一个具有多个构建变体的应用程序.这些变体用于为不同的公司构建相同应用程序的版本.所以,我有几个不同的变种,构建不同的应用程序:

  • com.acme.app1
  • com.schmoe.app2
  • com.yop.app3
  • 等等...

build.gradle文件处理得非常好:

     productFlavors {
    app1 {
        applicationId "com.acme.app1"
    }

    app2 {
        applicationId "com.schmoe.app2"
    }

    app3 {
        applicationId "com.yop.app3"
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的问题.我正在将Dropbox集成到我的应用程序中.必须为每个变体更改AndroidManifest.xml文件,以包含相应的应用程序密钥(存储在我的字符串文件中).Dropbox在清单文件中添加了以下内容:

         <activity
        android:name="com.dropbox.client2.android.AuthActivity"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboard">

        <intent-filter>
            <!-- Change this to be db- followed by your app key -->
            <data android:scheme="db-abcdef" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

每个构建变体都需要更改以下行:

 <data android:scheme="db-abcdef" />
Run Code Online (Sandbox Code Playgroud)

为每个应用程序变体的适当值.换句话说,我需要根据构建变量替换上面的部分字符串.例如

APP1

 <data android:scheme="db-111111" />
Run Code Online (Sandbox Code Playgroud)

应用2

 <data android:scheme="db-222222" />
Run Code Online (Sandbox Code Playgroud)

APP3

 <data android:scheme="db-333333" />
Run Code Online (Sandbox Code Playgroud)

对于每个变体,直到文本"db-"的行是相同的.

我需要的是用我的字符串文件中的字符串动态替换字符串的变量部分(x值)"db-xxxxxx".

我认为这可以通过gradle脚本完成,但我是gradle的完整newb.救命!

如果你可以提供帮助,请非常具体地了解自从我在gradle文件和脚本编写时出现的问题.提前致谢!

android

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

无法在Android上的弹出菜单中创建"共享"菜单

我有一个Android应用程序,其中有一个gridview.gridview项目包含一个显示上下文相关菜单的按钮.因此,我实现了一个弹出菜单,当他们触摸gridview项目中的按钮时会出现.

此菜单包含3个项目:

  1. 编辑项目
  2. 删除项目
  3. 分享项目

我已成功实现了编辑和删除菜单项.问题出在"共享项"菜单项上.它是一个ShareActionProvider.我以前将这些菜单选项实现为ActionMode(顶部的菜单项).但现在菜单是一个弹出窗口,我不知道如何实现"共享项"菜单选项.

这是我的popup_menu.xml:

     <?xml version="1.0" encoding="utf-8"?>     
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <group android:id="@+id/group_edit_mode">
        <item
            android:id="@+id/MenuItemEdit"
            android:title="@string/item_option_edit"
            app:showAsAction="withText|ifRoom" />

        <item
            android:id="@+id/MenuItemDelete"
            android:title="@string/delete"
            app:showAsAction="withText|ifRoom" />

        <item
            android:id="@+id/MenuItemShare"
            android:title="@string/share"
            app:showAsAction="ifRoom"
            app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
    </group>
</menu>
Run Code Online (Sandbox Code Playgroud)

这是弹出菜单代码:

                PopupMenu popupMenu = new PopupMenu(MINMainActivity.getSharedInstance(), optionButton);
            MenuInflater inflater = popupMenu.getMenuInflater();
            inflater.inflate(R.menu.gridview_edit_menu_single_item, popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
            {
                @Override
                public boolean onMenuItemClick(MenuItem item)
                {
                    boolean choiceHandled = false;
                    int itemID = item.getItemId();
                    switch (itemID)
                    {
                        case R.id.MenuItemEdit:
                            MINPageTypeGridFragment.launchAlbumItemDetails(mFragment, albumItem, mPageItem.pageConfigFileName);
                            mFragment.currentMode = MINPageTypeGridFragment.MODE_STANDARD;
                            choiceHandled = true;
                            break;
                        case R.id.MenuItemDelete:
                            MINPageTypeGridFragment.deleteItem(mFragment, …
Run Code Online (Sandbox Code Playgroud)

android gridview

8
推荐指数
1
解决办法
400
查看次数

如何让我的 Android 应用程序使用“服务帐户”访问共享的 Google 日历?

我认为答案是肯定的,但我不知道该怎么做。我一直在使用 API 从存储在设备上的日历中获取事件。例如

 public static ArrayList<MINCalendarEvent> queryEvents(long startMillis, long endMillis) throws  MINPermissionException
 {
    if ( ContextCompat.checkSelfPermission(MINMainActivity.getSharedInstance(), Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED )
    {
        throw new MINPermissionException(NO_PERMISSION);
    }
    else
    {
        ArrayList<MINCalendarEvent> eventArray = new ArrayList<MINCalendarEvent>();

        Cursor cur = CalendarContract.Instances.query(MINMainActivity.getSharedInstance().getContentResolver(), EVENT_PROJECTION, startMillis, endMillis);
        int numItems = cur.getCount();
        Log.d("MINCalendarUtils.queryEvents", "Number of events retrieved: " + numItems);
        while (cur.moveToNext())
        {
            MINCalendarEvent event = new MINCalendarEvent();
            event.calendarID = cur.getLong(EVENT_PROJECTION_CALENDAR_ID);
            event.organizer = cur.getString(EVENT_PROJECTION_ORGANIZER);
            event.title = cur.getString(EVENT_PROJECTION_TITLE);
            event.eventLocation = cur.getString(EVENT_PROJECTION_EVENT_LOCATION);
            event.description = cur.getString(EVENT_PROJECTION_DESCRIPTION);
            event.dtStart = cur.getLong(EVENT_PROJECTION_DTSTART);
            event.dtEnd = cur.getLong(EVENT_PROJECTION_DTEND); …
Run Code Online (Sandbox Code Playgroud)

android google-calendar-api

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

隐藏/取消隐藏主视图控制器在横向中与纵向相同

我在一个简单的应用程序中使用拆分视图控制器.将所有内容保留为默认设置正常.换句话说,主视图控制器始终以横向显示,并在按下后退按钮时以纵向覆盖详细视图控制器.

我想要做的是让主视图控制器模仿景观中的相同功能,就像在纵向中一样.换句话说,当设备处于横向时,我希望隐藏主视图控制器,直到我点击后退按钮,然后我希望它覆盖详细视图控制器.

我认为最好的方法是使用以下代码:

 - (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:     (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
 {
     return self.bHideMaster;
 }
Run Code Online (Sandbox Code Playgroud)

这有效,因为它以横向模式隐藏了主视图控制器.然后我使用以下代码重新出现:

 - (void)hideUnhidePagesController:(id)sender
 {
     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.30f];

     UISplitViewController* spv = self.splitViewController;

     // Change hide to unhide or vica versa
     self.bHideMaster= !self.bHideMaster;

     // Hide the button if master is visible
     if(self.bHideMaster)
     {
         self.navigationItem.leftBarButtonItem = self.pagesBarButton;
     }
     else
     {
          self.navigationItem.leftBarButtonItem = nil;
     }

     [spv.view setNeedsLayout];
     [spv willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
     [[self.splitViewController.viewControllers lastObject] view].frame = self.splitViewController.view.frame;
     [UIView commitAnimations];
 }
Run Code Online (Sandbox Code Playgroud)

这个ALMOST起作用了.我有两个问题:

  1. 从隐藏到取消隐藏和取消隐藏主视图控制器的过渡不是动画的,而是非常明显的.我添加了动画代码(见上文)但它只动画了详细视图控制器而不是主视图控制器.主机立即出现并消失(留下黑框消失),直到细节视图控制器滑过.

  2. 这也显示了我的第二个问题.我希望主视图控制器在横向模式下显示时与详细视图控制器重叠,使详细视图控制器保持原样.相反,它调整了细节视图控制器的大小(与我在开始之前在横向模式下的工作方式相同).我希望主视图控制器以与纵向模式相同的方式进行交互:主视图滑入详细控制器的顶部,并在选择项目时滑出.

如果我可以解决问题2,那么我不必担心问题1.分离视图控制器中应该有一个方法可以从左侧滑入主控器(与详细视图控制器重叠).它以纵向模式执行,因此代码必须在那里.如何在横向模式下调用相同的代码?

谢谢!

---------编辑1 ---------

我重构了hideUnhidePagesController并且越来越近了.窗口现在覆盖纵向和横向.如果主轴在旋转时可见,则仍然存在问题.它会混淆并反转预期的行为.我在做这个工作.修改后的代码在这里:

 - (void)hideUnhidePagesController:(id)sender …
Run Code Online (Sandbox Code Playgroud)

ipad uisplitviewcontroller ios

5
推荐指数
3
解决办法
8561
查看次数

如何在上下文操作栏中创建"搜索"字段?

我有一个ActionBar的活动.其中一个选项是搜索文档(不一定是本地文档).我想使用具有以下项目的上下文操作栏(CAB):

  • 编辑字段 - 用户输入要搜索的文本的位置
  • 上一个按钮 - 移动到与搜索匹配的上一个项目
  • 下一个按钮 - 移动到与搜索匹配的下一个项目

我想使用CAB有几个原因.首先,我希望用户选择一个选项,该选项将调出上面定义的CAB.当用户完成搜索时,他们选择完成按钮,ActionBar返回到先前状态.

这是问题所在.我无法让搜索项在扩展状态下显示在我的CAB中.注意:我尝试修改的活动不是主要活动,而是用户根据特定事件启动的活动.加载此活动后,用户可能会也可能不会决定使用我正在描述的"搜索"功能.我也不希望Android进行搜索.我有一个API,可以搜索我想要的结果,并允许我导航到上一个/下一个搜索结果.

我的CAB代码(正确调用)是:

     protected ActionMode mActionModeSearch;
private ActionMode.Callback mActionModeSearchCallback = new ActionMode.Callback()
{
    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu)
    {
        actionMode.getMenuInflater().inflate(R.menu.pdf_menu_search, menu);
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.pdf_menu_search_item).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
        {
            @Override
            public boolean onQueryTextSubmit(String s)
            {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s)
            {
                return false;
            }
        });
        return true;
    }

    @Override
    public boolean …
Run Code Online (Sandbox Code Playgroud)

android android-actionbar contextual-action-bar

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

XLForms中未触发事件

我正在使用XLForms构建iOS应用程序.我遇到了获取动作事件的问题.我已经尝试了两种block,formSelector但我没有得到这些事件.

这是我的代码:

 XLFormRowDescriptor * buttonRow = [XLFormRowDescriptor formRowDescriptorWithTag:@"button" rowType:XLFormRowDescriptorTypeButton title:@"Button"];
 [buttonRow.cellConfig setObject:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] forKey:@"textLabel.textColor"];
 buttonRow.action.formSelector = @selector(didTouchURLButton:);
 [section addFormRow:buttonRow];
Run Code Online (Sandbox Code Playgroud)

我没有问题编译/运行示例应用程序.我无法弄清楚有什么区别.我没有使用Cocoa Pods,而是将代码插入到项目中.

几乎看起来代表没有正确设置,但即使我打电话self.form.delegate = self,我仍然没有得到事件.

有任何想法吗?

ios objective-c-blocks xlform

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

无法将WebViewFragment派生类添加到FragmentTransaction

我正在使用ActionBarSherlock并实现一个选项卡式应用程序.每个选项卡代表一个只包含WebView的片段.我已经用从Fragment派生的对象实现了它.但是当我将其更改为WebViewFragment时,我无法再将其添加到FragmentTransaction中.我想知道我是否输入正确的东西?这是代码:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebViewFragment;
import android.widget.TextView;

public class WebTab1Fragment extends FragmentActivity {
    int mStackLevel = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webtab1_layout);


    if (savedInstanceState == null) {
        // Do first time initialization -- add initial fragment.
        MyWebvewFragment newFragment = MyWebviewFragment.newInstance(mStackLevel);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.simple_fragment, newFragment).commit();

    } else { …
Run Code Online (Sandbox Code Playgroud)

android actionbarsherlock

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

有没有更好的方法在 Dart 构造函数中测试 null

我正在使用以下构造函数构造一个对象:

 class A {
   int col;
   int row;

   A.fromMap(Map<dynamic, dynamic> data)
       : col = data['col'],
         row = data['row'];
 }

 class B {
   A aObj;
   int objType;
   int count;

   B.fromMap(Map<dynamic, dynamic> data)
       : objType = data['objType'],
         count = data['count'],
         aObj = A.fromMap(data['A']);
 }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我传入的地图没有 aObj 的映射,它就会崩溃。我尝试将分配移到大括号中并测试是否为空:

 if(data['A'] != null) {
    aObj = A.fromMap(data['A']);
 }
Run Code Online (Sandbox Code Playgroud)

这有效。但是我想像在其他数据成员中一样作为快捷构造函数的一部分进行测试。

那可能吗?

dart flutter

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

在Dart的Cloud Firestore中添加文档后如何获取文档ID

我使用以下代码通过Dart / Flutter更新了Cloud Firestore集合。

  final docRef = Firestore.instance.collection('gameLevels');
  docRef.document().setData(map).then((doc) {
    print('hop');
  }).catchError((error) {
    print(error);
  });
Run Code Online (Sandbox Code Playgroud)

我正在尝试将文档添加到集合中时创建的documentID,但(doc)参数返回为null。我以为应该是documentReference?

由于为空,因此我显然不能使用doc.documentID。

我究竟做错了什么?

dart flutter google-cloud-firestore

4
推荐指数
3
解决办法
2741
查看次数

无法使用Xcode 7和带有Podfile的GoogleMaps将IOS应用程序上传到iTunes

我有一个使用Xcode 7重建的应用程序.此应用程序一直在使用GoogleMaps IOS SDK.同时(大错误),我将代码更新为Xcode 7(支持IOS 9),我决定升级到最新版本的GoogleMaps API.此版本要求项目使用Podfiles.

我有多个目标,让Podfiles工作是一件痛苦的事,但我得到了它的工作.该应用程序在模拟器中编译并运行良好.当我存档项目并尝试将应用程序上传到App Store时,问题就出现了.我收到以下错误:

在此输入图像描述

我不知道该怎么做.我似乎无法找到有关此错误的任何信息.这是我的Podfile的副本:

# Podfile

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, ‘7.0’

# Common Pods

def common_pods
    pod 'GoogleMaps'
end

# Target List

target 'app1' do
    common_pods
end

target 'app2' do
    common_pods
end

target 'app3' do
    common_pods
end
Run Code Online (Sandbox Code Playgroud)

由于我无法控制Google API,因此无法更改其Info.plist文件.我错过了什么吗?

xcode google-maps ios cocoapods

2
推荐指数
1
解决办法
1027
查看次数

接收错误"DeviceMonitor"连接Galaxy Nexus时无法开始监控

当我将Galaxy Nexus连接到我的计算机时,我在Eclipse中收到错误"DeviceMonitor"无法开始监控...".

我曾经一次正常工作.从那时起,我所做的一切都是根电话.这可能搞砸了吗?

无论如何,我已经通过各种可能的解决方案来解决这个问题:

  • 重新安装的驱动程序(在我这样做之前,Eclipse根本没有看到手机)
  • 我加载了一个cmd提示符(Windows 7 Ultimate 64)并运行了adb kill-server
  • 我将Android SDK和工具添加到路径变量中
  • 重启电话和电脑
  • 祈祷

我不知所措.接下来我将尝试重新安装Eclipse.我真的,真的不想这样做,我不确定它是否会起作用.

有任何想法吗?

android

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